예제 #1
0
        /// <summary>
        /// Generates an RSS document.
        /// </summary>
        /// <param name="items"></param>
        /// <returns></returns>
        public override System.Xml.XmlDocument Generate(RssChannel channel)
        {
            if (channel == null)
            {
                throw new ArgumentNullException("channel");
            }

            // create a document...
            XmlDocument document = new XmlDocument();

            // doc...
            XmlNamespaceManagerEx manager = XmlHelper.GetNamespaceManagerEx(document);

            if (manager == null)
            {
                throw new InvalidOperationException("manager is null.");
            }

            manager.AddNamespace(RssChannel.BfxPrefix, RssChannel.BfxNamespace, true);

            // doc...
            XmlElement rssElement = document.CreateElement("rss");

            document.AppendChild(rssElement);
            XmlHelper.SetAttributeValue(rssElement, "version", "2.0");

            // channel...
            XmlElement channelElement = document.CreateElement("channel");

            rssElement.AppendChild(channelElement);
            channel.Populate(channelElement, manager);

            // return...
            return(document);
        }
예제 #2
0
파일: RssItem.cs 프로젝트: radtek/BootFX
        internal override void Populate(XmlElement element, XmlNamespaceManagerEx manager)
        {
            base.Populate(element, manager);

            // find the guid...
            XmlElement guidElement = (XmlElement)element.SelectSingleNode("guid");

            if (guidElement != null)
            {
                XmlHelper.SetAttributeValue(guidElement, "isPermaLink", this.GuidIsPermalink.ToString().ToLower());
            }

            if (this.Tags.Any())
            {
                StringBuilder builder = new StringBuilder();
                var           first   = true;
                foreach (var tag in this.Tags)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        builder.Append(" ");
                    }
                    builder.Append(tag);
                }

                manager.AddNamespace(RssChannel.BfxPrefix, RssChannel.BfxNamespace, true);
                element.AddElement("tags", builder.ToString(), RssChannel.BfxPrefix, RssChannel.BfxNamespace);
            }
        }
예제 #3
0
        /// <summary>
        /// Gets RSS items from the given document.
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        public static RssReadResults ReadRss(XmlDocument doc)
        {
            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }

            // get....
            XmlElement element = (XmlElement)doc.SelectSingleNode("rss");

            if (element != null)
            {
                // get the version...
                RssReader reader  = null;
                string    version = XmlHelper.GetAttributeString(element, "version", OnNotFound.ThrowException);
                if (version == "2.0")
                {
                    reader = new Rss2Reader();
                }
                else
                {
                    throw new NotSupportedException(string.Format("A version number of '{0}' is not supported.", version));
                }

                // get it...
                if (reader == null)
                {
                    throw new InvalidOperationException("reader is null.");
                }

                var manager = new XmlNamespaceManagerEx(doc);
                manager.AddNamespace(RssChannel.BfxPrefix, RssChannel.BfxNamespace, true);
                return(reader.Read(element, manager));
            }
            else
            {
                // mbr - 2009-01-07 - see if it is an atom feed...
                var manager = new XmlNamespaceManager(doc.NameTable);
                manager.AddNamespace("a", AtomReader.AtomNamespace);
                element = (XmlElement)doc.SelectSingleNode("a:feed", manager);
                if (element != null)
                {
                    var reader = new AtomReader();
                    return(reader.Read(element, manager));
                }
                else
                {
                    throw new NotImplementedException("This operation has not been implemented.");
                }
            }
        }