代码之家  ›  专栏  ›  技术社区  ›  Jagd Dai

对Atom提要中的名称空间感到困惑吗

  •  4
  • Jagd Dai  · 技术社区  · 15 年前

    两者有什么区别吗

    <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/");
    

    feed.ElementExtensions.Add("totalResults", @"http://a9.com/-/spec/opensearch/1.1/", "1000");
    
    3 回复  |  直到 8 年前
        1
  •  3
  •   Jagd Dai    14 年前

    没有关系。我意识到我添加的命名空间不正确。应该是的

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

    默认名称空间是从父元素继承的。或者,您可以为您的孩子定义新的别名以用于 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”元素位于不同的名称空间中,即默认名称空间(具有空名称空间或由其自己的父级定义的名称空间)。

    插入

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

    例如。

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

    但是请注意,您对给定给名称空间的特定别名的控制是有限的或没有控制权的。为了做到这一点,您必须控制XML序列化过程。。。

        3
  •  0
  •   Ulf Lindback    8 年前

    更完整。

    将通道元素上的指定命名空间设置为:

    feed.AttributeExtensions.Add(
      new XmlQualifiedName("opensearch", XNamespace.Xmlns.ToString()),
     "http://a9.com/-/spec/opensearch/1.1/");
    

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

    这将给你:

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