C # HtmlAgilityPack ajout de tbody

c# html html-agility-pack xpath

Question

Le C # HtmlAgilityPack, ajoute l'élément tbody après la fonction LoadHtml, dans l'arborescence DOM des tableaux, même s'il n'existe pas dans le document HTML d'origine. Comment puis-je désactiver ceci?

Mon algorithme crée des expressions XPATH, en parcourant l’arborescence et cet élément tbody non existant dans le document original empêche le SelectNodes de rechercher les éléments souhaités. Il m'a fallu beaucoup de temps pour comprendre ceci: |

Est-il possible de faire en sorte que SelectNodes considère également les nœuds ajoutés par HtmlAgilityPack?

Exemple:

<table>
    <tr><td>data</td></tr>
</table>

Mon application produirait cet XPATH pour extraire les 'données': // table / tbody / tr / td

La balise tbody dans expression a été ajoutée car elle est dans l’arborescence DOM après l’analyse du code html par HtmlAgilityPack, car HtmlAgilityPack l’a ajoutée même s’il n’existait pas. À cause de ça

<table>
    <tr><td>data</td></tr>
</table>

échouerait.

En d'autres termes, le parent TagName de l'élément tr (HtmlElement) est égal à "TBODY" et non à "TABLE". De plus, je suis en train d’analyser de nombreux sites Web, c’est une situation.

SelectNodes recherche dans le code HTML d'origine, et non par arborescence DOM, après HtmlDocument.LoadHtml, ou ne prend pas en compte les éléments 'virtuels' ajoutés par celui-ci.

Réponse populaire

Vous n'êtes pas obligé d'utiliser la hiérarchie complète.

Utilisez juste ce qui suit si tout ce que vous voulez sont les td s:

doc.DocumentNode.SelectNodes("//table//td");

ou simplement ignorer le noeud tbody et obtenir toute la hiérarchie qui vous tbody :

doc.DocumentNode.SelectNodes("//table//td");



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