XPath問題,得到“表達式必須評估為節點集”。錯誤

.net c# html-agility-pack node-set xpath

我通過其已經通過其他方式找到的顯式XPath檢索單個節點時遇到問題。我有節點 ,我可以獲得它的XPath,但是當我嘗試再次通過node.XPath檢索同一節點時,它給出了“表達式必須評估為節點集”錯誤。這不應該工作嗎?我在C#btw中使用HtmlAgilityPack作為HtmlDocument。

HtmlDocument doc = new HtmlDocument();
doc.Load(@"..\..\test1.htm");
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//node()[@id='something')])[first()]");
HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath);

BTW:這是node.XPath的值:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"..\..\test1.htm");
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//node()[@id='something')])[first()]");
HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath);

一般承認的答案

我能夠通過用函數text()替換#text來使它工作。我不確定為什麼它不會只是首先以這種方式發出XPath。

HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath.Replace("#text","text()");

熱門答案

你的XPath以“#text [2]”結尾,這意味著“第二個'文本'屬性”。屬性不是節點,它們是節點元數據。
這是我在XPath中遇到的一個常見問題:想要XPath操作絕對必須提取節點時屬性的值。

我用於此的解決方案是使用檢測和刪除字符串屬性部分的內容(通過myXPathString.LastIndexOf(“#”)方法調用)包裝我的XPath獲取,然後使用截斷的myXPathString來獲取節點並收集所需的屬性值作為第二步。

希望有所幫助,
Ĵ




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因