有什么区别

<opensearch:totalResults>1000</opensearch:totalResults>

<totalResults xmlns="opensearch">1000</totalResults>

我正在使用.NET中的SyndicationFeed类来生成一个原子供稿,并且我需要为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.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");
有帮助吗?

解决方案

没关系。我意识到我错误地添加了名称空间。它应该是

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

其他提示

名称空间

默认名称空间是从父元素继承的。否则,您可以为孩子定义新的别名 xmlns:alias= 语法或您可以重新定义用于使用元素的默认名称空间(当然是孩子) xmlns= 句法。

您的第一个示例:

<opensearch:totalResults>1000</opensearch:totalResults>

要求“ opensearch”名称空间别名由父元素定义 - 可能在不同的名称空间中。例如:

<myRoot xmlms:opensearch="http://a9.com/-/spec/opensearch/1.1/">
    <opensearch:totalResults>1000</opensearch:totalResults>
</myRoot>

尽管这意味着“ myroot”元素在不同的名称空间中 - 即默认一个元素(带有空白的名称空间或由其自己的父母定义的空间)。

插入

为了实际添加正确的命名空间元素,您需要使用名称空间本身,而不是别名(“ OpenSearch”)。

因此,要添加您的新元素,您需要从父节点中获取名称空间(否则只知道并对其进行了硬编码)。

例如

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", 1000);

但是请注意,您对命名空间的特定别名有限或无法控制。为此,您必须对XML序列化过程进行一些控制...

更完整。

设置在通道元素上指定名称空间:

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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top