Example #1
0
        private void writeItem(RssItem item, int channelHashCode)
        {
            if (writer == null)
                throw new InvalidOperationException("RssWriter has been closed, and can not be written to.");
            if (item == null)
                throw new ArgumentNullException("Item must be instanciated with data to be written.");
            if (!wroteChannel)
                throw new InvalidOperationException("Channel must be written first, before writing an item.");

            BeginDocument();

            writer.WriteStartElement("item");
            switch (rssVersion)
            {
                case RssVersion.RSS090:
                case RssVersion.RSS10:
                case RssVersion.RSS091:
                    WriteElement("title", item.Title, true);
                    WriteElement("description", item.Description, false);
                    WriteElement("link", item.Link, true);
                    break;
                case RssVersion.RSS20:
                    if ((item.Title == RssDefault.String) && (item.Description == RssDefault.String))
                        throw new ArgumentException("item title and description cannot be null");
                    goto case RssVersion.RSS092;
                case RssVersion.RSS092:
                    WriteElement("title", item.Title, false);
                    WriteElement("description", item.Description, false);
                    WriteElement("link", item.Link, false);
                    if (item.Source != null)
                    {
                        writer.WriteStartElement("source");
                        WriteAttribute("url", item.Source.Url, true);
                        writer.WriteString(item.Source.Name);
                        writer.WriteEndElement();
                    }
                    if (item.Enclosure != null)
                    {
                        writer.WriteStartElement("enclosure");
                        WriteAttribute("url", item.Enclosure.Url, true);
                        WriteAttribute("length", item.Enclosure.Length, true);
                        WriteAttribute("type", item.Enclosure.Type, true);
                        writer.WriteEndElement();
                    }
                    foreach(RssCategory category in item.Categories)
                        if (category.Name != RssDefault.String)
                        {
                            writer.WriteStartElement("category");
                            WriteAttribute("domain", category.Domain, false);
                            writer.WriteString(category.Name);
                            writer.WriteEndElement();
                        }
                    break;
            }
            if (rssVersion == RssVersion.RSS20)
            {
                WriteElement("author", item.Author, false);
                WriteElement("comments", item.Comments, false);
                if ((item.Guid != null) && (item.Guid.Name != RssDefault.String))
                {
                    writer.WriteStartElement("guid");
                    try {
                    WriteAttribute("isPermaLink", (bool)item.Guid.PermaLink, false);
                    } catch {}
                    writer.WriteString(item.Guid.Name);
                    writer.WriteEndElement();
                }
                WriteElement("pubDate", item.PubDate, false);

                foreach(RssModule rssModule in this._rssModules)
                {
                    if(rssModule.IsBoundTo(channelHashCode))
                    {
                        foreach(RssModuleItemCollection rssModuleItemCollection in rssModule.ItemExtensions)
                        {
                            if(rssModuleItemCollection.IsBoundTo(item.GetHashCode()))
                                writeSubElements(rssModuleItemCollection, rssModule.NamespacePrefix);
                        }
                    }
                }
            }
            writer.WriteEndElement();
            writer.Flush();
        }
Example #2
0
        private void writeItem(RssItem item, int channelHashCode)
        {
            if (writer == null)
            {
                throw new InvalidOperationException("RssWriter has been closed, and can not be written to.");
            }
            if (item == null)
            {
                throw new ArgumentNullException("Item must be instanciated with data to be written.");
            }
            if (!wroteChannel)
            {
                throw new InvalidOperationException("Channel must be written first, before writing an item.");
            }

            BeginDocument();

            writer.WriteStartElement("item");
            switch (rssVersion)
            {
            case RssVersion.RSS090:
            case RssVersion.RSS10:
            case RssVersion.RSS091:
                WriteElement("title", item.Title, true);
                WriteElement("description", item.Description, false);
                WriteElement("link", item.Link, true);
                break;

            case RssVersion.RSS20:
                if ((item.Title == RssDefault.String) && (item.Description == RssDefault.String))
                {
                    throw new ArgumentException("item title and description cannot be null");
                }
                goto case RssVersion.RSS092;

            case RssVersion.RSS092:
                WriteElement("title", item.Title, false);
                WriteElement("description", item.Description, false);
                WriteElement("link", item.Link, false);
                if (item.Source != null)
                {
                    writer.WriteStartElement("source");
                    WriteAttribute("url", item.Source.Url, true);
                    writer.WriteString(item.Source.Name);
                    writer.WriteEndElement();
                }
                if (item.Enclosure != null)
                {
                    writer.WriteStartElement("enclosure");
                    WriteAttribute("url", item.Enclosure.Url, true);
                    WriteAttribute("length", item.Enclosure.Length, true);
                    WriteAttribute("type", item.Enclosure.Type, true);
                    writer.WriteEndElement();
                }
                foreach (RssCategory category in item.Categories)
                {
                    if (category.Name != RssDefault.String)
                    {
                        writer.WriteStartElement("category");
                        WriteAttribute("domain", category.Domain, false);
                        writer.WriteString(category.Name);
                        writer.WriteEndElement();
                    }
                }
                break;
            }
            if (rssVersion == RssVersion.RSS20)
            {
                WriteElement("author", item.Author, false);
                WriteElement("comments", item.Comments, false);
                if ((item.Guid != null) && (item.Guid.Name != RssDefault.String))
                {
                    writer.WriteStartElement("guid");
                    try {
                        WriteAttribute("isPermaLink", (bool)item.Guid.PermaLink, false);
                    } catch {}
                    writer.WriteString(item.Guid.Name);
                    writer.WriteEndElement();
                }
                WriteElement("pubDate", item.PubDate, false);

                foreach (RssModule rssModule in this._rssModules)
                {
                    if (rssModule.IsBoundTo(channelHashCode))
                    {
                        foreach (RssModuleItemCollection rssModuleItemCollection in rssModule.ItemExtensions)
                        {
                            if (rssModuleItemCollection.IsBoundTo(item.GetHashCode()))
                            {
                                writeSubElements(rssModuleItemCollection, rssModule.NamespacePrefix);
                            }
                        }
                    }
                }
            }
            writer.WriteEndElement();
            writer.Flush();
        }