/// <summary>
        /// Parses the item.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns></returns>
        public IFeedItem ParseItem(XmlReader reader)
        {
            IRssFeedItem item = new RssFeedItem();

            reader.ReadToDescendant("item");

            bool readContent = false;

            while (readContent || reader.Read())
            {
                readContent = false;
                if (reader.NodeType == XmlNodeType.Element)
                {
                    readContent = true;
                    switch (reader.Name)
                    {
                    case "author":
                        item.Author = reader.ReadElementContentAsString();
                        break;

                    case "category":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Category = ConvertToIRssCategory(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "comments":
                        item.Comments = CachedPropertiesProvider.ConvertToUri(reader.ReadElementContentAsString());
                        break;

                    case "description":
                        item.Description = reader.ReadElementContentAsString();
                        break;

                    case "enclosure":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Enclosure = ConvertToIRssEnclosure(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "guid":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Guid = ConvertToIRssGuid(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "link":
                        item.Link = CachedPropertiesProvider.ConvertToUri(reader.ReadElementContentAsString());
                        break;

                    case "pubDate":
                        item.PublicationDate = CachedPropertiesProvider.ConvertToTzDateTime(reader.ReadElementContentAsString());
                        break;

                    case "source":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Source = ConvertToIRssSource(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "title":
                        item.Title = reader.ReadElementContentAsString();
                        break;

                    default:
                        UnhandledElement(item, reader);
                        break;
                    }
                }
            }
            reader.Close();
            return(item);
        }
        /// <summary>
        /// Parses the specified reader.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns></returns>
        public override T Parse <T>(System.Xml.XmlReader reader)
        {
            IRssFeed ret = (IRssFeed) new RssFeed();

            reader.Read();

            // RDF versions of RSS don't have version tags.
            //double version = double.Parse(reader.GetAttribute("version"));

            reader.ReadToDescendant("channel");

            bool readContent = false;

            while (readContent || reader.Read())
            {
                readContent = false;
                if (reader.NodeType == XmlNodeType.Element)
                {
                    readContent = true;
                    switch (reader.Name)
                    {
                    case "title":
                        ret.Title = reader.ReadElementContentAsString();
                        break;

                    case "link":
                        ret.FeedUri = CachedPropertiesProvider.ConvertToUri(reader.ReadElementContentAsString());
                        break;

                    case "description":
                        ret.Description = reader.ReadElementContentAsString();
                        break;

                    case "language":
                        ret.Culture = CachedPropertiesProvider.ConvertToCultureInfo(reader.ReadElementContentAsString());
                        break;

                    case "copyright":
                        ret.Copyright = reader.ReadElementContentAsString();
                        break;

                    case "managingEditor":
                        ret.ManagingEditor = reader.ReadElementContentAsString();
                        break;

                    case "webMaster":
                        ret.WebMaster = reader.ReadElementContentAsString();
                        break;

                    case "pubDate":
                        ret.PublicationDate = CachedPropertiesProvider.ConvertToTzDateTime(reader.ReadElementContentAsString());
                        break;

                    case "lastBuildDate":
                        ret.LastChanged = CachedPropertiesProvider.ConvertToTzDateTime(reader.ReadElementContentAsString());
                        break;

                    case "category":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Category = ConvertToIRssCategory(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "generator":
                        ret.Generator = reader.ReadElementContentAsString();
                        break;

                    case "docs":
                        ret.Doc = CachedPropertiesProvider.ConvertToUri(reader.ReadElementContentAsString());
                        break;

                    case "cloud":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Cloud = ConvertToIRssCloud(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "ttl":
                        ret.TimeToLive = CachedPropertiesProvider.ConvertToInt(reader.ReadElementContentAsString());
                        break;

                    case "image":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Image = ConvertToIRssImage(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    /*case "rating":
                     *  break;*/
                    case "textInput":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.TextInput = ConvertToIRssTextInput(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "skipHours":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.SkipHours = ConvertToSkipHourList(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "skipDays":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.SkipDays = ConvertToDayOfWeekList(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "item":
                        using (XmlReader itemReader = reader.ReadSubtree())
                        {
                            ret.Items.Add(ParseItem(itemReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    default:
                        UnhandledElement(ret, reader);
                        break;
                    }
                }
            }
            reader.Close();
            return((T)ret);
        }
        /// <summary>
        /// Parses the item.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns></returns>
        public IFeedItem ParseItem(XmlReader reader)
        {
            IAtomFeedItem item = new AtomFeedItem();

            reader.ReadToDescendant("entry");

            bool readContent = false;

            while (readContent || reader.Read())
            {
                readContent = false;
                if (reader.NodeType == XmlNodeType.Element)
                {
                    readContent = true;
                    switch (reader.Name)
                    {
                    case "id":
                        item.Id = CachedPropertiesProvider.ConvertToUri(reader.ReadElementContentAsString(), reader.BaseURI);
                        break;

                    case "title":
                        item.Title = reader.ReadElementContentAsString();
                        break;

                    case "updated":
                        item.LastUpdated = CachedPropertiesProvider.ConvertToTzDateTime(reader.ReadElementContentAsString());
                        break;

                    case "author":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Authors.Add(ConvertToIAtomPerson(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "link":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Links.Add(ConvertToIAtomLink(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "category":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Categories.Add(ConvertToIAtomCategory(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "contributor":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Contributors.Add(ConvertToIAtomPerson(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "rights":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Rights = ConvertToIAtomText(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "summary":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Summary = ConvertToIAtomText(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "content":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            item.Content = ConvertToIAtomContent(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "published":
                        item.Published = CachedPropertiesProvider.ConvertToTzDateTime(reader.ReadElementContentAsString());
                        break;

                    case "source":
                        item.Source = ConvertToIAtomFeed(reader.ReadOuterXml());
                        break;

                    default:
                        UnhandledElement(item, reader);
                        break;
                    }
                }
            }
            reader.Close();
            return(item);
        }
        /// <summary>
        /// Parses the specified reader.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns></returns>
        public override T Parse <T>(System.Xml.XmlReader reader)
        {
            IAtomFeed ret = (IAtomFeed) new AtomFeed();

            reader.Read();

            bool readContent = false;

            while (readContent || reader.Read())
            {
                readContent = false;
                if (reader.NodeType == XmlNodeType.Element)
                {
                    readContent = true;
                    switch (reader.Name)
                    {
                    case "id":
                        ret.FeedUri = CachedPropertiesProvider.ConvertToUri(reader.ReadElementContentAsString(), reader.BaseURI);
                        break;

                    case "title":
                        ret.Title = reader.ReadElementContentAsString();
                        break;

                    case "updated":
                        ret.LastUpdated = CachedPropertiesProvider.ConvertToTzDateTime(reader.ReadElementContentAsString());
                        break;

                    case "generator":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Generator = ConvertToIAtomGenerator(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "author":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Authors.Add(ConvertToIAtomPerson(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "link":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Links.Add(ConvertToIAtomLink(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "category":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Categories.Add(ConvertToIAtomCategory(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "entry":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Items.Add(ParseItem(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "contributor":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Contributors.Add(ConvertToIAtomPerson(subReader));
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "logo":
                        ret.Logo = reader.ReadElementContentAsString();
                        break;

                    case "icon":
                        ret.Icon = reader.ReadElementContentAsString();
                        break;

                    case "rights":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Rights = ConvertToIAtomText(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    case "subtitle":
                        using (XmlReader subReader = reader.ReadSubtree())
                        {
                            ret.Subtitle = ConvertToIAtomText(subReader);
                        }
                        if (reader.IsEmptyElement)
                        {
                            readContent = false;
                        }
                        break;

                    default:
                        UnhandledElement(ret, reader);
                        break;
                    }
                }
            }
            reader.Close();
            return((T)ret);
        }
Beispiel #5
0
        internal static IOpmlHead ConvertToIOpmlHead(XmlReader input)
        {
            OpmlHead head = new OpmlHead();

            input.ReadToDescendant("head");
            bool readContent = false;

            while (readContent || input.Read())
            {
                readContent = false;
                if (input.NodeType == XmlNodeType.Element)
                {
                    readContent = true;
                    switch (input.Name)
                    {
                    case "title":
                        head.Title = input.ReadElementContentAsString();
                        break;

                    case "dateCreated":
                        head.DateCreated = CachedPropertiesProvider.ConvertToTzDateTime(input.ReadElementContentAsString());
                        break;

                    case "dateModified":
                        head.DateModified = CachedPropertiesProvider.ConvertToTzDateTime(input.ReadElementContentAsString());
                        break;

                    case "ownerName":
                        head.Owner = input.ReadElementContentAsString();
                        break;

                    case "ownerEmail":
                        head.OwnerEmail = input.ReadElementContentAsString();
                        break;

                    case "expansionState":
                        head.ExpansionState = input.ReadElementContentAsString();
                        break;

                    case "vertScrollState":
                        head.VerticalScrollState = CachedPropertiesProvider.ConvertToIntNullable(input.ReadElementContentAsString());
                        break;

                    case "windowTop":
                        head.WindowTop = CachedPropertiesProvider.ConvertToIntNullable(input.ReadElementContentAsString());
                        break;

                    case "windowLeft":
                        head.WindowLeft = CachedPropertiesProvider.ConvertToIntNullable(input.ReadElementContentAsString());
                        break;

                    case "windowBottom":
                        head.WindowBottom = CachedPropertiesProvider.ConvertToIntNullable(input.ReadElementContentAsString());
                        break;

                    case "windowRight":
                        head.WindowRight = CachedPropertiesProvider.ConvertToIntNullable(input.ReadElementContentAsString());
                        break;

                    default:
                        readContent = false;
                        break;
                    }
                }
            }
            input.Close();
            return(head);
        }