HtmlAgilityPack C # --- Selectnodes renvoie toujours un Null

c# html-agility-pack html-parsing xpath

Question

C'est le texte xpath que j'ai essayé d'utiliser avec l'analyseur HtmlAgilityPack C #.

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

J'ai essayé d'évaluer l'expression xpath avec firefox xpath add = on et j'ai obtenu les éléments requis. Mais le code c # renvoie une exception Null.

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

le noeud contient toujours une valeur nulle ... Aidez-moi à trouver le moyen de contourner ce problème ... Merci ..

Réponse populaire

DOM nécessite que les <tbody/> soient insérées

Toutes les extensions de navigateur courantes permettant de créer des expressions XPath fonctionnent sur le DOM. Contrairement aux spécifications HTML, les spécifications DOM exigent que les éléments <tr/> soient à l'intérieur des éléments <tbody/> , afin que les navigateurs ajoutent de tels éléments s'ils sont manquants. Vous pouvez facilement voir la différence en regardant la source HTML à l'aide de Firebug (ou des outils de développement similaires travaillant sur le DOM) par rapport à l'affichage de la source de page (en utilisant wget ou des outils similaires qui n'interprètent rien si nécessaire).

La solution

Supprimez l'étape /tbody et votre expression XPath fonctionnera probablement.

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

Si vous devez prendre en charge les <tbody/> HTML avec et sans <tbody/>

Pour une solution plus générale, vous pouvez remplacer le pas /tbody par un pas // , mais cela pourrait basculer dans les "tables internes":

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

Il serait préférable d’utiliser des expressions XPath alternatives:

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

Une solution uniquement XPath 2.0 plus propre serait

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi