如何将两个XPath合并为单个节点集合?
合并两个XPath查询结果为单个列表
方法一:使用XPath并集运算符|
XPath里合并两个节点集的标准写法就是用|,你之前的思路是对的,可能是书写细节问题导致没生效,正确代码如下:
var combinedNodes = document.DocumentNode.SelectNodes("//div[@class='pad-hrz-xs']/a[@data-zone='title'] | //div[@class='card-v2-pricing']/p[@class='product-new-price']");
如果还是没得到预期结果,先排查几点:
- 确认HTML里的class、属性名没有拼写错误(比如大小写、多余空格)
- 检查两类节点确实存在于当前文档中
- 你的HtmlAgilityPack版本是否对XPath 1.0并集操作支持正常
方法二:用LINQ合并两个结果集
如果XPath方式始终不生效,直接用LINQ合并两个独立查询的结果更稳妥,还能避免null引用问题:
// 先获取两个节点集,为空时初始化空集合 var processorTitles = document.DocumentNode.SelectNodes("//div[@class='pad-hrz-xs']/a[@data-zone='title']") ?? new HtmlNodeCollection(null); var processorsPrices = document.DocumentNode.SelectNodes("//div[@class='card-v2-pricing']/p[@class='product-new-price']") ?? new HtmlNodeCollection(null); // 合并为单个列表 var combinedNodes = processorTitles.Cast<HtmlNode>().Concat(processorsPrices.Cast<HtmlNode>()).ToList();
内容的提问来源于stack exchange,提问作者VLAD_W47FK
相关产品推荐
相关产品推荐

