XmlDocument XPath 表达式失败
XmlDocument XPath expression failing
我正在使用 C# XmlDocument API。
我有以下 XML:
<Node1>
<Node2>
<Node3>
</Node3>
</Node2>
</Node1>
我想将 Node3 作为 XmlNode。但是我的代码返回 null:
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode root_node = doc.DocumentElement.SelectSingleNode("/Node1");
Log(root_node.OuterXml);
XmlNode test_node = root_node.SelectSingleNode("/Node2/Node3");
if (test_node == null)
Logger.Log.Error(" --- TEST NODE IS NULL --- ");
root_node.OuterXml
的日志
<Node1><Node2><Node3>.....
但是test_node
returns无效。
这里出了什么问题?
当您从根节点选择时,请使用 // 而不是 /
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode root_node = doc.DocumentElement.SelectSingleNode("/Node1");
XmlNode test_node = root_node.SelectSingleNode("//Node2/Node3");
另一种选择是使用节点 3 的完整路径
XmlNode test_node = doc.DocumentElement.SelectSingleNode("/Node1/Node2/Node3");
你可以简单的调用Descendants()
var xml= @"<Node1><Node2><Node3></Node3></Node2></Node1>";
XDocument doc = XDocument.Parse(xml);
var node = doc.Descendants("Node3");
或从Root
开始使用Element()
var node2= doc.Root.Element("Node2").Element("Node3");
或使用XPathSelectElement()
var node3= doc.XPathSelectElement("/Node1/Node2/Node3");
使用路径 "Node2/Node3"
而不是 "/Node2/Node3"
:
XmlNode test_node = root_node.SelectSingleNode("Node2/Node3");
在 XPath 表达式中,前导正斜杠 /
表示文档的根目录。表达式 "/Node2/Node3"
不起作用,因为 <Node2>
不在文档的根目录中。
我正在使用 C# XmlDocument API。
我有以下 XML:
<Node1>
<Node2>
<Node3>
</Node3>
</Node2>
</Node1>
我想将 Node3 作为 XmlNode。但是我的代码返回 null:
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode root_node = doc.DocumentElement.SelectSingleNode("/Node1");
Log(root_node.OuterXml);
XmlNode test_node = root_node.SelectSingleNode("/Node2/Node3");
if (test_node == null)
Logger.Log.Error(" --- TEST NODE IS NULL --- ");
root_node.OuterXml
的日志
<Node1><Node2><Node3>.....
但是test_node
returns无效。
这里出了什么问题?
当您从根节点选择时,请使用 // 而不是 /
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode root_node = doc.DocumentElement.SelectSingleNode("/Node1");
XmlNode test_node = root_node.SelectSingleNode("//Node2/Node3");
另一种选择是使用节点 3 的完整路径
XmlNode test_node = doc.DocumentElement.SelectSingleNode("/Node1/Node2/Node3");
你可以简单的调用Descendants()
var xml= @"<Node1><Node2><Node3></Node3></Node2></Node1>";
XDocument doc = XDocument.Parse(xml);
var node = doc.Descendants("Node3");
或从Root
Element()
var node2= doc.Root.Element("Node2").Element("Node3");
或使用XPathSelectElement()
var node3= doc.XPathSelectElement("/Node1/Node2/Node3");
使用路径 "Node2/Node3"
而不是 "/Node2/Node3"
:
XmlNode test_node = root_node.SelectSingleNode("Node2/Node3");
在 XPath 表达式中,前导正斜杠 /
表示文档的根目录。表达式 "/Node2/Node3"
不起作用,因为 <Node2>
不在文档的根目录中。