InnerText = InnerHtml - Cómo extraer texto legible con HtmlAgilityPack

html html-agility-pack innerhtml innertext vb.net

Pregunta

Necesito extraer texto de un HTML muy malo.

Estoy tratando de hacer esto usando vb.net y HtmlAgilityPack

La etiqueta que necesito analizar tiene InnerText = InnerHtml y ambos:

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

Mientras depuro puedo leerlo usando "visor de HTML": muestra:

Name: Albert Einstein section: 3 room: -

¿Cómo puedo obtener esto en una variable de cadena?

EDITAR:

Yo uso este código para obtener el nodo:

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

Respuesta aceptada

Si observa que este desorden es en realidad solo comentarios html y se ignorarán, así que solo obtener el texto y usar la string.Join es suficiente:

DO#

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

VB.net

 Dim text = String.Join("", From t In htmlDoc.DocumentNode.SelectNodes("//text()[normalize-space()]")
                                   Select t.InnerText)

el html es válido, no tiene nada de malo, solo está escrito por alguien sin alma.

basado en su actualización esto hará:

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

tenga en .// que .// significa que buscará los nodos descendientes del nodo actual a diferencia de // que siempre se iniciará desde el nodo superior.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow