之间有什么区别吗?
<opensearch:totalResults>1000</opensearch:totalResults>
和
<totalResults xmlns="opensearch">1000</totalResults>
我正在使用.NET中的SyndicationFeed类来生成Atom提要,我需要为opensearch标准添加一些元素,但是当我希望它添加像上面那样的元素时,它会继续添加上面的元素前者。
代码:
feed.ElementExtensions.Add("totalResults", "opensearch", "2");
修改
根源标记看起来像这样
<feed xml:lang="en-US" p1:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:p1="xmlns" xmlns="http://www.w3.org/2005/Atom">
将我的代码更改为@Reddog建议后,totalresults元素看起来像这样
<totalResults xmlns="http://a9.com/-/spec/opensearch/1.1/">1000</totalResults>
将命名空间添加到feed标记的代码如下所示
feed.AttributeExtensions.Add(
new XmlQualifiedName("opensearch", "xmlns"),
@"http://a9.com/-/spec/opensearch/1.1/");
添加totalresults元素的代码现在看起来像这样
feed.ElementExtensions.Add("totalResults", @"http://a9.com/-/spec/opensearch/1.1/", "1000");
答案 0 :(得分:3)
没关系。我意识到我错误地添加了命名空间。它应该是
feed.AttributeExtensions.Add(
new XmlQualifiedName("opensearch", "http://www.w3.org/2000/xmlns/"),
"http://a9.com/-/spec/opensearch/1.1/");
答案 1 :(得分:2)
<强>命名空间强>
默认名称空间是从父元素继承的。或者,您可以为子项定义新的别名以使用xmlns:alias=
语法,或者您可以使用xmlns=
语法重新定义要用于元素(当然还有子元素)的默认命名空间。 / p>
你的第一个例子:
<opensearch:totalResults>1000</opensearch:totalResults>
要求“opensearch”命名空间别名由父元素定义 - 可能在不同的命名空间中。例如:
<myRoot xmlms:opensearch="http://a9.com/-/spec/opensearch/1.1/">
<opensearch:totalResults>1000</opensearch:totalResults>
</myRoot>
虽然这意味着“myRoot”元素位于不同的命名空间中 - 即默认命名空间(具有空白命名空间或由其自己的父命名空间定义)。
<强>插入强>
为了实际添加具有正确名称空间的元素,您需要使用名称空间本身,而不是它的别名(“opensearch”)。
因此,要添加新元素,您需要从父节点中获取命名空间(或者只知道它并对其进行硬编码)。
E.g。
feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", 1000);
但请注意,您对命名空间的特定别名的控制有限或无法控制。为此,您必须控制XML序列化过程...
答案 2 :(得分:0)
更完整。
使用以下命令在channel元素上设置指定名称空间:
feed.AttributeExtensions.Add(
new XmlQualifiedName("opensearch", XNamespace.Xmlns.ToString()),
"http://a9.com/-/spec/opensearch/1.1/");
并在totalResults上指定名称空间:
feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", "1000");
那会给你:
<opensearch:totalResults>1000</opensearch:totalResults>