C# XmlNode.SelectSingleNode返回当前外部的元素?
我的问题是这样的。假设我有这样的xmlC# 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>
<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");