XmlNode.SelectSingleNode返回当前的元素?

时间:2010-02-10 15:55:14

标签: 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>

我有一个获取参数XmlNode“node”的方法。让我们说“节点”的值为“child1”然后我尝试这样:

node.SelectSingleNode( "//element3" );

问题是这段代码从“child2”返回element3。我想要的是如果没有“node”的子元素“element3”返回null,那么我手工添加它 最诚挚的问候,
Iordand

4 个答案:

答案 0 :(得分:21)

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

替换为:

node.SelectSingleNode( "element3" ); 

你会得到你正在寻找的结果。

答案 1 :(得分:8)

“//”是全局查找。

您需要做的是获取所有孩子的列表

XmlNodeList nodes = xmlDoc.SelectNodes("//Child");

遍历该列表并执行

XmlNode node = nodes.SelectSingleNode("element3");

如果不存在,则返回null,并逐步查看每个孩子。

答案 2 :(得分:8)

当我想在指定节点上运行xpath时,以下工作非常完美。

XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");

答案 3 :(得分:3)

这里的问题是你正在使用的XPath表达式,尝试没有'//'。像那样:

node.SelectSingleNode( "element3" );

了解更多here

相关问题