用于捕获交替行的 XPath

XPath to Capture Alternating Rows

使用 HtmlAgilityPack,我试图捕获行 class 名称交替出现的 table 行。下面的片段:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var documentNode = doc.DocumentNode;
var lstNodes = documentNode.SelectNodes("//table[@class='rgMasterTable']");
var tableNode = lstNodes[0];
var rows = tableNode.SelectNodes("//tr[@class='rgRow dnnGridItem'|@class='rgAltRow dnnGridAltItem']");

在最后一行,我试图说“给我 class 是 rgRow dnnGridItemrgAltRow dnnGridAltItem 的行。但是,我得到以下异常:

Exception thrown: 'System.Xml.XPath.XPathException' in System.Xml.dll

Additional information: Expression must evaluate to a node-set.

HTML 的来源可在此处获得:http://www.terna.it/it-it/sistemaelettrico/remit.aspx

非常感谢任何有关正确 XPath 查询的帮助。

感谢来自@LukášDoležal 的link:Select on multiple criteria with XPath

UNION 应该在节点上,而不是在 class 规范上。

var rows = tableNode.SelectNodes("//tr[@class='rgRow dnnGridItem'|@class='rgAltRow dnnGridAltItem']");

变成

var rows = tableNode.SelectNodes("//tr[@class='rgRow dnnGridItem'] | //tr[@class='rgAltRow dnnGridAltItem']");

或更短(感谢@splash58):

var rows = tableNode.SelectNodes("//tr[@class='rgRow dnnGridItem' or @class='rgAltRow dnnGridAltItem']");