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

时间:2010-03-15 14:03:38

标签: c# xml xpath

我将举一个问题的例子。我的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>

我有xpath表达式,它返回所有“element2”节点。然后我想为“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>

“element”和child之间可以有3个以上的节点,节点数从1到20之间变化。请给我一个例子,只有一个xpath查询,在两种情况下只使用“子”节点..“

最诚挚的问候,
约尔丹

3 个答案:

答案 0 :(得分:4)

您正在寻找祖先xpath轴:

element2/ancestor::child

祖先轴返回包含context元素的所有元素,向上移动。

答案 1 :(得分:3)

那么您当前的上下文是element2元素?使用parent axis

parent::child/@Name

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

如果您不在element2的上下文中,并且想要找到child个孩子的所有element2元素,则需要使用此元素:

child[element2]

答案 2 :(得分:3)

使用..运算符。