Beispiel #1
0
 public AtomEventPageReader(IAtomFeed atomFeed, AtomFile file, DateTime startTime, DateTime endTime)
 {
     m_AtomFeed     = atomFeed;
     m_AtomFile     = file;
     m_NextPageLink = m_AtomFile.EventsLink;
     m_StartTime    = startTime;
     m_EndTime      = endTime;
 }
        /// <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);
        }