我使用.NET SyndicationFeed類,並使用SyndicationItem.ElementExtensions.Add()添加了一些我自己的擴展,並將SyndicationItem.Content設置爲某些Xml內容。如何正確使用xmlns命名空間和.NET SyndicationFeeds的自定義擴展?
我的問題是我的命名空間在XML輸出中出現多次。理想情況下,我會將xmlns屬性應用於根節點,並在整個文檔中使用其別名。
我見過使用SyndicationFeed.AttributeExtensions的示例,如here。例如:
feed.AttributeExtensions.Add(
new System.Xml.XmlQualifiedName("myns", "http://www.w3.org/2000/xmlns"),
"http://myNamespace.com");
但是,這些例子都沒有顯示如何在以後使用命名空間。例如,以下兩種方法可以擴展Feed:
XNamespace myNs = "http://myNamespace.com";
SyndicationItem item = new SyndicationItem();
XElement myMetadata = new XElement(myNs + "metadata");
myMetadata.Add(new XElement(myNs + "meta1", "value1"));
myMetadata.Add(new XElement(myNs + "meta2", "value2"));
item.Content = SyndicationContent.CreateXmlContent(myMetadata);
XElement myExtensions = new XElement(myNs + "myExtensions");
myExtensions.Add(new XElement(myNs + "ext1", "value1"));
myExtensions.Add(new XElement(myNs + "ext2", "value2"));
item.ElementExtensions.Add(myExtensions);
希望我錯過了簡單的事情。隨着進一步的上述AttribuetExtensions.Add()方法,我的進料具有用於初始XML以下:
<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
<channel p3:myns="http://myNamespace.com" xmlns:p3="http://www.w3.org/2000/xmlns">
當然,我寧願對於myns名字的XMLNS是根RSS節點,而不是信道上,但我可以接受它在頻道上的生活。不幸的是,聯合項目XML是什麼樣子:
<item>
...
<a10:content type="text/xml">
<metadata xmlns="http://myNamespace.com">
<meta1>value1</meta2>
<meta2>value2</meta2>
</metadata>
</a10:content>
<myExtensions xmlns="http://myNamespace.com">
<ext1>value1</ext1>
<ext2>value2</ext2>
</myExtensions>
</item>
當然,我更願意看到的是:
<item>
...
<a10:content type="text/xml">
<myns:metadata>
<meta1>value1</meta2>
<meta2>value2</meta2>
</myns:metadata>
</a10:content>
<myns:myExtensions>
<ext1>value1</ext1>
<ext2>value2</ext2>
</myns:myExtensions>
</item>
有聯用SyndicationFeed.AttributeExtensions定義的命名空間的一些特殊的方法擴展SyndicationItem時使用了什麼?