C# XmlNode.SelectSingleNode返回当前外部的元素?

C# XmlNode.SelectSingleNode返回当前外部的元素?,c#,xml,xpath,C#,Xml,Xpath,我的问题是这样的。假设我有这样的xml <root> <child Name = "child1"> <element1>Value1</element1> <element2>Value2</element2> </child> <child Name = "child2"> <element1>Value1</element1>

我的问题是这样的。假设我有这样的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>
问题是这段代码从“child2”返回element3。我想要的是,如果“node”的子元素“element3”不返回null,那么我手动添加它。
致以最诚挚的问候,

Iordand

您拥有的XPath表达式不是您想要的

将其替换为以下内容:

node.SelectSingleNode( "element3" ); 
您将得到您想要的结果。

“/”是一个全局查找

你需要做的是得到一份所有孩子的名单

XmlNodeList nodes = xmlDoc.SelectNodes("//Child");
循环浏览该列表并做一个测试

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

如果不存在,它将返回null,并将遍历每个查找的子项。

这里的问题是您正在使用的XPath表达式,请在不使用“/”的情况下尝试。就像这样:

node。选择SingleNode(“元素3”)


阅读更多信息。

当我想在指定节点上运行xpath时,以下操作非常有效

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

或者,“/element3”,因为它可能有助于明确它的含义。还有一件事要问,“element3”是否不是“child”的直接子节点,但在使用什么xpath之间有另一个节点?@lordantananev:您可以将//放在当前所在的节点和所需的节点之间,像这样:
//element3
。这是一个缩写的绝对表达式。它将扩展为
/genderant或self::node()/child::element3
。含义:从上下文节点的文档根节点到其所有子节点,选择QName等于
element3
“element3”
对我不起作用的子元素<代码>“//element3”
完成了。
XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");