Dot-Net
XPath 和選擇單個節點
我在 .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教程以易於理解的格式提供了有用的資訊。