Exemplo n.º 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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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();
        }
Exemplo n.º 6
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.");
                }
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        /// <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]);
                }
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 13
0
 /// <summary>
 /// Reads the RSS from teh document.
 /// </summary>
 /// <param name="doc"></param>
 /// <returns></returns>
 internal abstract RssReadResults Read(XmlElement element, XmlNamespaceManagerEx manager);