2017-05-08 2 views
1

Mit HtmlAgilityPack versuche ich Zeilen einer Tabelle zu erfassen, in der der Zeilenklassenname wechselt. Snippet unten:XPath zum Erfassen wechselnder Zeilen

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

In der letzten Zeile, Ich versuche, „Gib mir Reihen zu sagen, wo die Klasse ist entweder‚rgRow dnnGridItem‘oder‚rgAltRow dnnGridAltItem‘Allerdings bekomme ich die folgende Ausnahme:.

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

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

die Quelle des HTML ist hier verfügbar: http://www.terna.it/it-it/sistemaelettrico/remit.aspx

Jede mögliche Unterstützung für die Abfrage korrekten XPath sehr geschätzt

+0

Warum Sie keine Probe des HTML zur Verfügung stellen? –

+0

Ich dachte, dass die Frage ohne genug klar sein sollte, und der HTML würde nur Unordnung hinzufügen. Link für Interessierte. – GinjaNinja

+2

Schauen Sie sich dies an: http://StackOverflow.com/Questions/2599198/Select-on-Multiple-criteria-with-xpath - sieht aus, Sie sollten stattdessen die beiden Selektoren verbinden, anstatt Ausdruck in den Kriterien. –

Antwort

1

Dank. Link von @ LukášDoležal: Select on multiple criteria with XPath

Die UNION sollte auf den Knoten sein, nicht auf der Klassenspezifikation.

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

wird

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

oder kürzer noch (dank @ splash58):

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