我正在使用.NETSyndicationFeed类,并使用添加了一些自己的扩展联合项目.ElementExtensions.Add()以及设置联合项目.内容对一些Xml内容。
我的问题是,我的命名空间在XML输出中多次出现。理想情况下,我会将xmlns属性应用于根节点,并在整个文档中使用它的别名。
我见过一些讨论使用联合订阅源.AttributeExtensions如所见
here
feed.AttributeExtensions.Add(
new System.Xml.XmlQualifiedName("myns", "http://www.w3.org/2000/xmlns"),
"http://myNamespace.com");
但是,这些示例都没有展示以后如何使用名称空间。例如,以下是扩展提要的两种方法:
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);
希望我错过了一些简单的东西。与AttributeTextensions.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>
是否有某种特殊的方法来链接由定义的命名空间联合订阅源.AttributeExtensions在扩展一个联合项目时使用这个?