InnerText = InnerHtml - Как извлечь читаемый текст с помощью HtmlAgilityPack

html html-agility-pack innerhtml innertext vb.net

Вопрос

Мне нужно извлечь текст из очень плохого Html.

Я пытаюсь сделать это с помощью vb.net и HtmlAgilityPack

Тег, который мне нужно проанализировать, имеет InnerText = InnerHtml и оба:

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

При отладке я могу прочитать его с помощью «Html viewer»: он показывает:

Name: Albert Einstein section: 3 room: -

Как я могу получить это в строковой переменной?

РЕДАКТИРОВАТЬ:

Я использую этот код для получения узла:

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

Принятый ответ

Если вы заметили, что этот беспорядок на самом деле представляет собой только HTML-комментарии, их следует игнорировать, поэтому просто получить текст и использовать string.Join достаточно:

C #

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)

html действительно, ничего плохого в этом, его просто написал кто-то без души.

на основе вашего обновления это должно делать:

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

обратите внимание. .// это означает, что он будет искать узлы-потомки текущего узла в отличие от // которые всегда будут начинаться с верхнего узла.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow