XmlNode.SelectSingleNode返回当前的元素?

Ior*_*nev 19 c# xml xpath

我的问题是这样的.假设我有像这样的xml

<root>
  <child Name = "child1">
    <element1>Value1</element1>
    <element2>Value2</element2>
  </child>
  <child Name = "child2">
    <element1>Value1</element1>
    <element2>Value2</element2>
    <element3>Value3</element3>
  </child>
</root>
Run Code Online (Sandbox Code Playgroud)

我有一个方法获取参数XmlNode"节点".让我们说"节点"有值"child1"然后我尝试这样:

node.SelectSingleNode( "//element3" );
Run Code Online (Sandbox Code Playgroud)

问题是这段代码从"child2"返回element3.我想要的是如果没有"node"的子"element3"返回null,所以我手动添加它.

诚挚的问候,Iordand

Wel*_*bog 22

你拥有的XPath表达式不是你想要的.

替换为:

node.SelectSingleNode( "element3" ); 
Run Code Online (Sandbox Code Playgroud)

而且你会得到你正在寻找的结果.

  • 或者"./element3",因为它可能有助于明确其含义. (3认同)
  • @lordanTanev:你可以把//放在你当前所在的节点和你想要的节点之间,如:`.// element3`. (3认同)

kaz*_*zim 10

当我想在指定节点上运行xpath时,以下工作是完美的.

XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");
Run Code Online (Sandbox Code Playgroud)


tay*_*onr 8

"//"是全局查找.

你需要做的是获得所有孩子的清单

XmlNodeList nodes = xmlDoc.SelectNodes("//Child");
Run Code Online (Sandbox Code Playgroud)

循环遍历该列表并执行

XmlNode node = nodes.SelectSingleNode("element3");
Run Code Online (Sandbox Code Playgroud)

如果它不在那里,它将返回null,并将逐步查看每个孩子.