代码之家  ›  专栏  ›  技术社区  ›  IordanTanev

使用xpath获取已定义类型的节点父级

  •  2
  • IordanTanev  · 技术社区  · 15 年前

    我将举一个我遇到的问题的例子。我的XML是这样的

    <root>
      <child Name = "child1">
      <node>
      <element1>Value1</element1>
      <element2>Value2</element2>
      </node>
      </child>
      <child Name = "child2">
      <element1>Value1</element1>
      <element2>Value2</element2>
      <element3>Value3</element3>
      </child>
    </root>
    

    我有返回所有“element2”节点的xpath表达式。然后我想为“element2”类型的每个节点找到包含它的“child”类型的节点。问题是这两个节点之间可能有1到n个不同的节点,所以我不能只使用“..”。有像“/”这样的东西会向上而不是向下看吗

    我对xpath有一些基本知识 http://www.w3schools.com/xpath/xpath_syntax.asp “.”返回当前节点父级问题是当前节点是“element2”,问题是XML是动态的,来自第三方库,所以我可以使用这样的XML

    <child Name = "child1">
      <node>
      <element1>Value1</element1>
      </node>
    </child>
    

    或者像这样

    <child Name = "child1">
      <node1>
       <node2>
        <node3>
         <element1>Value1</element1>
         <element2>Value2</element2>
        </node3>
       </node2>
      </node1>
    </child>
    

    “元素”和子元素之间可以有3个以上的节点,节点的数量从1到20不等。请给我一个例子,在这两种情况下,只使用一个xpath查询来获取“child”节点。

    谨致问候,
    约旦

    3 回复  |  直到 15 年前
        1
  •  3
  •   Welbog    15 年前

    所以你现在的背景是 element2 元素?使用 parent axis :

    parent::child/@Name
    

    它将获取当前元素的父元素,名为 child ,并获取其属性 Name .

    如果你不在 元素2 你想找到所有 小孩 元素 元素2 孩子们,你需要的是这个:

    child[element2]
    
        2
  •  4
  •   James Sulak    15 年前

    您正在寻找的是祖先xpath轴:

    element2/ancestor::child
    

    祖先轴返回包含上下文元素的所有元素,并向上返回。

        3
  •  3
  •   AndrewC    15 年前

    使用…操作员。