/// <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); }
/// <summary> /// Populates an XML element with the values within the collection. /// </summary> /// <param name="element"></param> internal void PopulateXmlElement(XmlElement element, XmlNamespaceManagerEx manager) { if (element == null) { throw new ArgumentNullException("element"); } if (manager == null) { throw new ArgumentNullException("manager"); } // walk... foreach (TouchedValue value in this.InnerList) { XmlElement valueElement = element.OwnerDocument.CreateElement( XmlConvert.EncodeName(value.Field.Name)); element.AppendChild(valueElement); // add... if (value.OldValue != null) { this.AddValueElement(valueElement, "Old", value.OldValue); } this.AddValueElement(valueElement, "New", value.NewValue); } }
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> /// Saves the property bag to a new XML document. /// </summary> /// <param name="topElementName"></param> /// <returns></returns> private XmlDocument ToXmlDocument(string topElementName) { if (topElementName == null) { throw new ArgumentNullException("topElementName"); } if (topElementName.Length == 0) { throw new ArgumentOutOfRangeException("'topElementName' is zero-length."); } // create... XmlDocument doc = new XmlDocument(); XmlNamespaceManagerEx manager = XmlHelper.GetNamespaceManagerEx(doc); if (manager == null) { throw new InvalidOperationException("manager is null."); } // create... XmlElement element = doc.CreateElement(topElementName); doc.AppendChild(element); // save... this.Save(element, manager, SimpleXmlSaveMode.ReplaceExisting); // return... return(doc); }
/// <summary> /// Saves the property bag to a new XML document. /// </summary> /// <param name="topElementName"></param> /// <returns></returns> public void Save(XmlElement element, XmlNamespaceManagerEx manager, SimpleXmlSaveMode mode) { if (element == null) { throw new ArgumentNullException("element"); } if (manager == null) { throw new ArgumentNullException("manager"); } // raise... this.OnSaving(); // clear? if (mode == SimpleXmlSaveMode.ClearAllChildren) { while (element.FirstChild != null) { element.RemoveChild(element.FirstChild); } } // mbr - 20-10-2005 - to do this, we want to sort the names so that we are always serializing in a consistent order... ArrayList names = new ArrayList(this.InnerValues.Keys); names.Sort(); // walk and add items... foreach (string name in names) { // find a child with the name... object value = this.InnerValues[name]; try { if ((mode & SimpleXmlSaveMode.UseAttributes) != 0) { this.SaveValueAsAttribute(element, name, value); } else { this.SaveValueAsElement(element, name, value, mode); } } catch (Exception ex) { throw new InvalidOperationException(string.Format("Failed to append value '{0}'. ({1})", name, value), ex); } } // raise... this.OnSaved(); }
/// <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."); } } }
private RssItem GetItem(XmlElement element, XmlNamespaceManagerEx manager) { if (element == null) { throw new ArgumentNullException("element"); } // create... RssItem item = new RssItem(); // mbr - 17-08-2006 - read them in using the leaf reader... // item.Title = XmlHelper.GetElementString(element, "title", OnNotFound.ThrowException); // item.Description = XmlHelper.GetElementString(element, "description", OnNotFound.ReturnNull); // item.Link = XmlHelper.GetElementString(element, "link", OnNotFound.ThrowException); // item.Category = XmlHelper.GetElementString(element, "category", OnNotFound.ReturnNull); // item.PubDateAsString = XmlHelper.GetElementString(element, "pubDate", OnNotFound.ReturnNull); item.ReadLeafValues(element); // guid... XmlElement guidElement = (XmlElement)element.SelectSingleNode("guid"); if (guidElement != null) { item.Guid = guidElement.InnerText; item.GuidIsPermalink = XmlHelper.GetAttributeBoolean(guidElement, "isPermaLink", OnNotFound.ReturnNull); } var tags = (XmlElement)element.SelectSingleNode(RssChannel.BfxPrefix + ":tags", manager.Manager); if (tags != null) { var asString = tags.InnerText; var parts = asString.Split(' '); foreach (var part in parts) { var usePart = part.Trim(); if (usePart.Length > 0) { item.Tags.Add(usePart); } } } // return... return(item); }
private void SerializeSettings(XmlElement parentElement, XmlNamespaceManagerEx manager, SimpleXmlPropertyBag bag) { if (parentElement == null) { throw new ArgumentNullException("parentElement"); } if (bag == null) { throw new ArgumentNullException("bag"); } // add... XmlElement element = parentElement.OwnerDocument.CreateElement("Settings"); parentElement.AppendChild(element); // save... bag.Save(element, manager, SimpleXmlSaveMode.ReplaceExisting); }
/// <summary> /// Populates an element. /// </summary> /// <param name="element"></param> /// <param name="manager"></param> internal virtual void Populate(XmlElement element, XmlNamespaceManagerEx manager) { if (element == null) { throw new ArgumentNullException("element"); } if (manager == null) { throw new ArgumentNullException("manager"); } // walk and add... foreach (string name in this.GetNames()) { // if it starts with a dollar - it's special... if (string.Compare(name, "description", true, Cultures.System) == 0) { XmlElement descElement = element.OwnerDocument.CreateElement("description"); element.AppendChild(descElement); // text... descElement.AppendChild(element.OwnerDocument.CreateCDataSection((string)this[name])); } else if (!(name.StartsWith("$"))) { // split it... string namespaceUri = null; string prefix = null; string localName = null; manager.SplitFullName(name, ref prefix, ref namespaceUri, ref localName); // set... XmlElement valueElement = element.OwnerDocument.CreateElement(prefix, localName, namespaceUri); element.AppendChild(valueElement); // set the element - don't use the dt namespace as RSS doesn't seem to use it. this.SetElementValue(valueElement, this[name]); } } }
internal override RssReadResults Read(XmlElement element, XmlNamespaceManagerEx manager) { if (element == null) { throw new ArgumentNullException("element"); } // channel element... XmlElement channelElement = (XmlElement)element.SelectSingleNode("channel"); if (channelElement == null) { throw new InvalidOperationException("channelElement is null."); } // channel... RssChannel channel = new RssChannel(); channel.ReadLeafValues(channelElement); // walk items... RssReadResults results = new RssReadResults(channel); foreach (XmlElement itemElement in channelElement.SelectNodes("item")) { // create... RssItem item = this.GetItem(itemElement, manager); if (item == null) { throw new InvalidOperationException("item is null."); } // add... channel.Items.Add(item); } // return... return(results); }
/// <summary> /// Gets all of the blocks as an XML document. /// </summary> /// <returns></returns> public XmlDocument GetBlocksAsXml() { XmlDocument doc = new XmlDocument(); XmlNamespaceManagerEx manager = XmlHelper.GetNamespaceManagerEx(doc); // add... manager.AddDataTypeNamespace(); // root... XmlElement root = doc.CreateElement("Blocks"); doc.AppendChild(root); // walk... foreach (TouchedValueCollection block in this.Blocks) { XmlElement element = doc.CreateElement("Block"); root.AppendChild(element); block.PopulateXmlElement(element, manager); } // return... return(doc); }
/// <summary> /// Gets the XML for these settings. /// </summary> /// <returns></returns> public XmlDocument ToXmlDocument() { this.OnBeforeXmlSerialization(); if (EntityType == null) { throw new InvalidOperationException("EntityType is null."); } // create... XmlDocument doc = new XmlDocument(); // mbr - 22-09-2006 - manager... XmlNamespaceManagerEx manager = XmlHelper.GetNamespaceManagerEx(doc); if (manager == null) { throw new InvalidOperationException("manager is null."); } // root... XmlElement rootElement = doc.CreateElement(RootElementName); doc.AppendChild(rootElement); // type... this.AddTypeAttribute(rootElement, this.GetType()); // entity type... XmlElement etElement = doc.CreateElement("EntityType"); rootElement.AppendChild(etElement); etElement.InnerText = string.Format("{0}, {1}", this.EntityType.Type.FullName, this.EntityType.Type.Assembly.GetName().Name); // sources? XmlElement manglersElement = doc.CreateElement("Manglers"); rootElement.AppendChild(manglersElement); // sources... foreach (FilterMangler mangler in this.Manglers) { if (mangler.ManglerId == null) { throw new InvalidOperationException("'mangler.ManglerId' is null."); } if (mangler.ManglerId.Length == 0) { throw new InvalidOperationException("'mangler.ManglerId' is zero-length."); } // owner... XmlElement manglerElement = doc.CreateElement("Mangler"); manglersElement.AppendChild(manglerElement); // type... XmlAttribute manglerIdAttr = doc.CreateAttribute("manglerId"); manglerIdAttr.Value = mangler.ManglerId; manglerElement.Attributes.Append(manglerIdAttr); if (mangler.Filter != null) { this.AddTypeAttribute(manglerElement, mangler.Filter.GetType()); } // settings... SimpleXmlPropertyBag bag = new SimpleXmlPropertyBag(); mangler.Filter.SerializeSqlSearchSettings(bag); // add... this.SerializeSettings(manglerElement, manager, bag); } // settings... if (this.Settings.Count > 0) { this.SerializeSettings(rootElement, manager, this.SettingsAsSimpleXmlPropertyBag); } // return... return(doc); }
/// <summary> /// Reads the RSS from teh document. /// </summary> /// <param name="doc"></param> /// <returns></returns> internal abstract RssReadResults Read(XmlElement element, XmlNamespaceManagerEx manager);