繁体   English   中英

C# 和 Xpath - 在单个 Xpath 查询中使用节点集和字符串类型返回结果

[英]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.

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