InnerText = InnerHtml - HtmlAgilityPackで読みやすいテキストを抽出する方法

html html-agility-pack innerhtml innertext vb.net

質問

私は非常に悪いHTMLからテキストを抽出する必要があります。

私はvb.netHtmlAgilityPackを使ってこれをしようとしています

解析する必要のあるタグには、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を使う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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ