/// <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); }
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); } }
/// <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."); } } }