簡體   English   中英

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返回null。

這是怎么了?

從根節點中選擇時,使用//代替/

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");

使用路徑"Node2/Node3"代替"/Node2/Node3"

XmlNode test_node = root_node.SelectSingleNode("Node2/Node3");

在XPath表達式中,前導斜杠/表示文檔的根。 表達式"/Node2/Node3"不起作用,因為<Node2>不在文檔的根目錄。

您可以簡單地調用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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM