How to create a SyndicationFeed with a custom namespace

How can I create an Atom feed that will contain the namespaces displayed in the image below? All Atom feed nodes must begin with "a:".

enter image description here

Here is what I am doing right now, however it does not work.

SyndicationFeed feed = new SyndicationFeed(); XmlQualifiedName key = new XmlQualifiedName("os", "xmlns"); feed.AttributeExtensions.Add(key, "http://a9.com/-/spec/opensearch/1.1/"); 

Thanks!

+4
source share
1 answer

I believe it should be

 SyndicationFeed feed = new SyndicationFeed(); XmlQualifiedName key = new XmlQualifiedName("os", "http://www.w3.org/2000/xmlns/"); feed.AttributeExtensions.Add(key, "http://a9.com/-/spec/opensearch/1.1/"); 

UPDATE:

After reading your question more carefully, I believe that you could do this by overriding the WriteStartElement and WriteStartAttribute methods of the XmlWriter instance used by Atom10FeedFormatter . You can do this by running your own XmlWriter class, for example, the example below.

 class AtomXmlTextWriter : XmlTextWriter { private const string Atom10XmlNs = "http://www.w3.org/2005/Atom"; private const string Atom10XmlNsPrefix = "a"; public AtomXmlTextWriter(String filename, Encoding encoding) : base(filename, encoding) { } public override void WriteStartElement(string prefix, string localName, string ns) { base.WriteStartElement(GetAtomPrefix(ns), localName, ns); } public override void WriteStartAttribute(string prefix, string localName, string ns) { base.WriteStartAttribute(GetAtomPrefix(ns), localName, ns); } internal string GetAtomPrefix(string ns) { string prefix = string.Empty; if ((ns != null) && (ns.Equals(Atom10XmlNs))) prefix = Atom10XmlNsPrefix; return prefix; } } 

Using your own class with Atom10FeedFormatter

 SyndicationFeed feed = new SyndicationFeed(); feed.AttributeExtensions.Add(new XmlQualifiedName("os", "http://www.w3.org/2000/xmlns/"), "http://a9.com/-/spec/opensearch/1.1/"); feed.AttributeExtensions.Add(new XmlQualifiedName(null, "http://www.w3.org/2000/xmlns/"), http://schemas.zune.net/catalog/apps/2008/02"); using (XmlWriter writer = new AtomXmlTextWriter(@"TestFeed.xml", Encoding.UTF8)) { Atom10FeedFormatter feedFormatter = new Atom10FeedFormatter(feed); feedFormatter.WriteTo(writer); } 

displays the desired result

 <a:feed xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://schemas.zune.net/catalog/apps/2008/02" xmlns:a="http://www.w3.org/2005/Atom"> <a:title type="text" /> <a:id>uuid:0f1b2c84-c935-459e-bc89-79d06b5a976b;id=1</a:id> <a:updated>2011-05-21T17:07:46Z</a:updated> </a:feed> 
+4
source

All Articles