2017-05-08 54 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']");