HTMLAgility Pack peut-il laisser des balises non fermées?

c# html-agility-pack

Question

J'ai besoin d'analyser une chaîne HTML comme ceci:

<widget attribute="1">
  <header>
    <table>
  </header>
  <item>
    <tr><td>content</td></tr>
  </item>
  <footer>
    </table>
  </footer>
</widget>

J'utilise Html Agility Pack et je peux trouver tous les "widgets":

<widget attribute="1">
  <header>
    <table>
  </header>
  <item>
    <tr><td>content</td></tr>
  </item>
  <footer>
    </table>
  </footer>
</widget>

Mon problème est lorsque j'essaie d'obtenir tous les noeuds enfants du noeud Widget. HTMLAgility ferme automatiquement toutes mes balises. Je ne peux donc pas récupérer correctement les noeuds Header, Item et Footer. La sortie générée par Agility est:

<widget attribute="1">
  <header>
    <table>
  </header>
  <item>
    <tr><td>content</td></tr>
  </item>
  <footer>
    </table>
  </footer>
</widget>

Il ferme la balise Table dans l'en-tête et masque la balise Table dans le pied de page. Il y a un moyen de laisser ces balises non fermées? J'ai essayé de chercher de la documentation sur la logique de la méthode LoadHtml mais je n'ai rien trouvé. Je pense que je dois jouer avec Options.

Pouvez-vous m'aider?

Réponse populaire

Html Agility Pack ne prend généralement pas en charge le chevauchement des balises. Cependant, vous pouvez le modifier comme ceci:

HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags.Add("table", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);
doc.LoadHtml(htmlString); 

Dans ce cas, vous indiquez à la bibliothèque de traiter TABLE comme une balise qui se chevauche. En remarque, FORM est le seul TAG défini par défaut comme une balise qui se chevauche (voir la raison ici: HtmlAgilityPack - <form> se ferme-t-il pour une raison quelconque? ).

Cependant, cela ne vient pas comme un repas gratuit ...

Cela signifie que la bibliothèque verra maintenant ce qu'il y a à l'intérieur de la table et des balises de table de fermeture en tant qu'élément de texte pur. Ainsi, toutes les balises de la table analysée ne seront pas accessibles par programme, vous ne la verrez pas dans le DOM, vous ne la verrez pas avec XPATH, etc., mais cela peut suffire à vos besoins.




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