2016-03-02 1 views
1

Je dois extraire le texte d'un Html très mauvais.InnerText = InnerHtml - Comment extraire le texte lisible avec HtmlAgilityPack

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

L'étiquette 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: - 

Alors que debug je peux le lire en utilisant « spectateur Html ": il montre:

Name: Albert Einstein section: 3 room: - 

Comment est-ce que je peux obtenir ceci dans une variable de chaîne?

EDIT:

J'utiliser ce code pour obtenir le nœud:

Dim ElePs As HtmlNodeCollection = _ 
    mWPage.DocumentNode.SelectNodes("//div[@id='div_main']//p") 
For Each EleP As HtmlNode In ElePs 
    'Here I need to get EleP.InnerText "normalized" 
Next 
+0

pouvez-vous essayé cela? http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve-only-text-not-nested-in-child-tags Je ne sais pas si cela fonctionne sur mauvais html ... essayez –

+0

Vous devez poster plus de html je pense - il ne semble pas si mauvais sur le visage de celui-ci –

+0

@ Mr.Developer Pouvez-vous expliquer un peu plus? J'ai compris la logique mais j'ai besoin de plus d'hel pour l'essayer. Merci d'avance – genespos

Répondre

2

Si vous remarquez ce gâchis est en fait seulement les commentaires HTML et ils sont ignorés, si juste obtenir le texte et en utilisant string.Join suffit:

C#

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

V Le html est valide, rien de mal à ce sujet, c'est juste écrit par quelqu'un sans âme.

en fonction de votre mise à jour ce sont faire:

Dim ElePs As HtmlNodeCollection = mWPage.DocumentNode.SelectNodes("//div[@id='div_main']//p") 
For Each EleP As HtmlNode In ElePs 
    'Here I need to get EleP.InnerText "normalized" 
    Dim text = String.Join("", From t In EleP.SelectNodes(".//text()[normalize-space()]") 
       Select t.InnerText).Trim() 
Next 

note le .// cela signifie qu'il va chercher les nœuds descendants du noeud courant contrairement // qui commence toujours à partir du nœud supérieur.

+0

Merci pour votre réponse, mais je n'ai pas été capable de l'adapter à mon code. J'ai mis à jour ma question pour montrer comment obtenir l'élément HTML dont j'ai besoin pour extraire InnerText. Pouvez-vous s'il vous plaît adapter votre réponse à mon code? – genespos

+0

@genespos vérifier la mise à jour –

+0

Je me sens stupide: il me manquait le point. Merci beaucoup. – genespos