2017-05-08 53 views
1

使用HtmlAgilityPack,我试图捕捉到一个表,其中的行类名候补委员行。下面的代码片段:XPath来捕捉交替行

 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']"); 

在最后一行,我想说“给我行,其中的类或者是‘rgRow dnnGridItem’或‘rgAltRow 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查询不胜感激任何援助

+0

你为什么不提供HTML的样本? –

+0

我认为这个问题应该清楚,没有,HTML只会增加混乱。为有兴趣的人提供链接。 – GinjaNinja

+2

看看这个:http://stackoverflow.com/questions/2599198/select-on-multiple-criteria-with-xpath - 看起来你应该结合两个选择器,而不是在条件中有表达式。 –

回答

1

感谢。从@LukášDoležal链接:Select on multiple criteria with XPath

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

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']");