2017-05-08 5 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 - 代わりに2つのセレクタを結合して、条件内の式を持つ必要があります。 –

答えて

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']"); 
関連する問題