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(); }
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(); }