2017-05-08 1 views
1

En utilisant HtmlAgilityPack, j'essaie de capturer des lignes d'une table où le nom de classe de ligne alterne. Snippet ci-dessous:XPath pour capturer des lignes alternées

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

Sur la dernière ligne, je suis en train de dire: « Donnez-moi les lignes où la classe est soit « rgRow dnnGridItem » ou « rgAltRow dnnGridAltItem » Cependant, je reçois l'exception suivante:.

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

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

la source du code HTML est disponible ici: http://www.terna.it/it-it/sistemaelettrico/remit.aspx

Toute aide sur la requête XPath correcte

très apprécié
+0

Pourquoi ne pas vous fournir l'échantillon du HTML? –

+0

Je pensais que la question devrait être assez claire sans, et le HTML ne ferait qu'ajouter du fouillis. Lien fourni pour ceux qui sont intéressés. – GinjaNinja

+2

Regardez ceci: http://stackoverflow.com/questions/2599198/select-on-multiple-criteria-with-xpath - vous devez à la place unir les deux sélecteurs au lieu d'avoir une expression dans les critères. –

Répondre

1

Merci à. lien de @ LukášDoležal: Select on multiple criteria with XPath

L'UNION devrait être sur les nœuds, pas sur la spécification de classe.

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

devient

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

ou moins encore (grâce à @ splash58):

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