Ich muss Text von einem sehr schlechten HTML extrahieren.
Ich versuche dies mit vb.net
und HtmlAgilityPack
zu tun
Das Tag, das ich analysieren muss, hat InnerText = InnerHtml und beide:
Name:<!--b>=</b--> Albert E<!--span-->instein s<!--i>Y</i-->ection: 3 room: -
Beim Debuggen kann ich es mit "Html Viewer" lesen: es zeigt:
Name: Albert Einstein section: 3 room: -
Wie kann ich dies in eine String-Variable bekommen?
BEARBEITEN:
Ich benutze diesen Code, um den Knoten zu erhalten:
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
Wenn Sie bemerken, dass dieses Durcheinander tatsächlich nur HTML-Kommentare ist und sie ignoriert werden sollen, so genügt es, den Text zu bekommen und 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)
Das HTML ist gültig, nichts schlechtes daran, es ist nur von jemandem ohne Seele geschrieben.
basierend auf Ihrem Update soll dies tun:
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
beachte das .//
das bedeutet, dass es im Gegensatz zu //
die immer vom obersten Knoten ausgehen, nach den Nachkommenknoten des aktuellen Knotens suchen wird.