InnerText = InnerHtml - Comment extraire un texte lisible avec HtmlAgilityPack

html html-agility-pack innerhtml innertext vb.net

Question

J'ai besoin d'extraire du texte d'un très mauvais HTML.

Je suis en train de le faire en utilisant vb.net et HtmlAgilityPack

La balise que je dois analyser a InnerText = InnerHtml et les deux:

Name:<!--b>&#61;</b--> Albert E<!--span-->instein  s<!--i>&#89;</i-->ection: 3 room: -

Pendant le débogage, je peux le lire en utilisant "visionneuse HTML":

Name:<!--b>&#61;</b--> Albert E<!--span-->instein  s<!--i>&#89;</i-->ection: 3 room: -

Comment puis-je obtenir cela dans une variable de chaîne?

MODIFIER:

J'utilise ce code pour obtenir le noeud:

Name:<!--b>&#61;</b--> Albert E<!--span-->instein  s<!--i>&#89;</i-->ection: 3 room: -

Réponse acceptée

Si vous remarquez que ce gâchis n'est en réalité que des commentaires HTML et qu'ils doivent être ignorés, il est donc suffisant de récupérer le texte et d'utiliser string.Join :

C #

var text = string.Join("",htmlDoc.DocumentNode.SelectNodes("//text()[normalize-space()]").
                                            Select(t=>t.InnerText));

VB.net

var text = string.Join("",htmlDoc.DocumentNode.SelectNodes("//text()[normalize-space()]").
                                            Select(t=>t.InnerText));

le html est valide, rien de grave, c'est écrit par quelqu'un qui n'a pas d'âme.

sur la base de votre mise à jour, cela doit:

var text = string.Join("",htmlDoc.DocumentNode.SelectNodes("//text()[normalize-space()]").
                                            Select(t=>t.InnerText));

notez le .// cela signifie qu'il recherchera les nœuds descendants du nœud actuel contrairement à // qui démarrera toujours à partir du nœud supérieur.




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