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

C# 使用xpath获取定义类型的节点父节点,c#,xml,xpath,C#,Xml,Xpath,我将举一个我遇到的问题的例子。我的XML是这样的 <root> <child Name = "child1"> <node> <element1>Value1</element1> <element2>Value2</element2> </node> </child> <child Name = "child2"> <element1&g

我将举一个我遇到的问题的例子。我的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>
<child Name = "child1">
  <node1>
   <node2>
    <node3>
     <element1>Value1</element1>
     <element2>Value2</element2>
    </node3>
   </node2>
  </node1>
</child>

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

我有一些xpath的基本知识,根据“.”返回当前节点父节点问题是当前节点是“element2”,问题是xml是动态的,来自第三方库,所以我可以使用这样的xml

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

价值1
还是像这样

<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>
<child Name = "child1">
  <node1>
   <node2>
    <node3>
     <element1>Value1</element1>
     <element2>Value2</element2>
    </node3>
   </node2>
  </node1>
</child>

价值1
价值2
“元素”和子节点之间可以有3个以上的节点,节点数量从1到20不等。请给出一个示例,说明在这两种情况下,仅使用“.”就可以通过一个xpath查询来获取“子”节点

致以最诚挚的问候,

Iordan

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

element2/ancestor::child

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

因此当前上下文是
element2
元素?使用
父元素

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

如果您不在
element2
的上下文中,并且希望查找包含
element2
子元素的所有
child
元素,则需要使用此元素:

child[element2]

使用..运算符。

@IordanTanev:BTW,
父项:*
的快捷方式是
,因此
。/@Name
也可以很好地工作。使用缩写词
相当于使用
父项:
轴。您不能使用
的声明完全错误。
请验证您的状态nts提供了示例,这样可以显著减少使用错误和误导性陈述提出的问题的数量。学习一点XPath也不会有什么坏处。您好,这是写在我的问题中的。在“element2”和“child”之间,还有1到n个其他节点,所以我不知道多少次需要使用“.”来访问“child”“@Dimitre Novatchev我已经编辑了我的问题