4

有没有区别

<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.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");
4

3 回答 3

3

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

feed.AttributeExtensions.Add(
   new XmlQualifiedName("opensearch", "http://www.w3.org/2000/xmlns/"),
   "http://a9.com/-/spec/opensearch/1.1/");
于 2010-07-06T17:26:10.303 回答
2

命名空间

默认命名空间继承自父元素。或者,您可以为您的孩子定义新的别名以使用该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 序列化过程进行一些控制...

于 2010-07-01T18:44:14.937 回答
0

要更完整。

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

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>
于 2016-08-29T12:18:12.603 回答