繁体   English   中英

XPath问题,出现“表达式必须计算为节点集”的错误。

[英]XPath problem, getting “expression must evaluate to a node-set.” error

我在通过其他方式已经找到的显式XPath检索单个节点时遇到了麻烦。 我有节点 ,我可以得到它的XPath,但是当我这次尝试再次通过node.XPath检索同一节点时,它给出“表达式必须计算为节点集”错误。 这不行吗? 我在C#btw中为HtmlDocument使用HtmlAgilityPack。

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

顺便说一句:这是node.XPath的值:

"/html[1]/body[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tr[1]/td[1]/div[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[4]/div[2]/div[1]/div[1]/div[4]/#text[2]"

我可以通过将#text替换为text()函数来使其工作。 我不确定为什么它不首先发出XPath。

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

您的XPath以“ #text [2]”结尾,表示“第二个'text'属性”。 属性不是节点,它们是节点元数据。
这是我使用XPath时经常遇到的问题:在XPath操作绝对必须提取节点的同时,需要属性值。

为此,我使用的解决方案是将XPath的获取包装起来,以检测并剥离字符串的属性部分(通过myXPathString.LastIndexOf(“#”)方法调用),然后使用截断的myXPathString来获取节点并收集所需的属性值作为第二步。

希望能有所帮助,
Ĵ

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM