[英]XPath Expression must evaluate to a node-set with OK XPath Path (Tested with online XPath tester and Oxygen)
[英]C# and Xpath - return result using Node-Set and string type result in single Xpath query
在项目中,我使用 Xpath 来刮价格。 在这种情况下,我可以有 2 个选项来获取下一个查询指定的价格:
var xpath = @"substring-after(//div[@class='price'],":")|//span[@class="oldPrice"]";
在 C# 代码中:
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html);
XPathNavigator navigator = document.DocumentNode.CreateNavigator();
var eval = navigator.Evaluate(xpath); // here i get error: Expression must evaluate to a node-set.
var expression = navigator.Compile(xpath); // and also here i get error: Expression must evaluate to a node-set.
我知道substring-after(//div[@class='price'],":")
是字符串的返回类型。 并且//span[@class="oldPrice"]
是节点集的返回类型
你有什么建议我应该如何处理这个案子?
a) 我是否应该拆分 xpath 并解析以“|”分隔的每个部分?
b)或者是否有其他方法可以使用上面的组合 xpath 查询而不拆分字符串并检查每个部分来获得结果?
c) 我是否错过了其他任何符合我要求的 class?
我希望有足够的上下文。
联合运算符仅适用于节点集,因此您的表达式应该失败,因为 LHS 是一个字符串(即使 //div 什么都不选择,它也是一个字符串)。
您是否期望//span[@class="oldPrice"]
返回单个节点? 在这种情况下,您可以使用 string() function 将其转换为字符串,然后使用 concat() function 连接两个字符串。
考虑迁移到更高版本的 XPath,它允许您返回字符串序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.