Dot-Net

XPath 和選擇單個節點

  • April 28, 2017

我在 .NET 中使用 XPath 來解析 XML 文件,大致如下:

XmlNodeList lotsOStuff = doc.SelectNodes("//stuff");

foreach (XmlNode stuff in lotsOStuff) {
  XmlNode stuffChild = stuff.SelectSingleNode("//stuffChild");
  // ... etc
}

問題是 XPath 查詢stuffChild總是返回第一個元素的子stuff元素,而不是其餘元素。XPath 不能用於查詢個人XMLElement嗎?

//XPath 表達式的開頭從文件根開始。試試“.//stuffChild”。. 是 self::node() 的簡寫,它將設置搜尋的上下文, // 是後代軸的簡寫。

所以你有了:

XmlNode stuffChild = stuff.SelectSingleNode(".//stuffChild");

翻譯為:

xmlNode stuffChild = stuff.SelectSingleNode(“self::node()/descendant::stuffChild”);

xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant-or-self::stuffChild");

在子節點可能與父節點同名的情況下,您可能希望使用下面稍微詳細一點的語法,以確保您不會重新選擇父節點:

xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");

另請注意,如果“stuffChild”是“stuff”的直接後代,則可以完全省略前綴,而只需選擇“stuffChild”。

XmlNode stuffChild = stuff.SelectSingleNode("stuffChild");

W3Schools教程以易於理解的格式提供了有用的資訊。

引用自:https://stackoverflow.com/questions/26800