2016-03-02 52 views
1

我需要從非常糟糕的Html中提取文本。InnerText = InnerHtml - 如何使用HtmlAgilityPack提取可讀文本

我試圖做到這一點使用vb.netHtmlAgilityPack

,我需要解析的標籤具有的innerText = innerHTML的無一不:

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

雖然調試運行,我可以使用閱讀「HTML查看器「:它顯示:

Name: Albert Einstein section: 3 room: - 

我怎樣才能把它變成一個字符串變量?

編輯:

我用這個代碼來獲取節點:如果您注意到這個爛攤子實際上只是HTML註釋

​​
+0

你可以試試嗎? http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve-only-text-not-nested-in-child-tags我不知道如果這項工作在不良的HTML ...嘗試 –

+0

你需要發佈更多的html我認爲 - 它看起來並不那麼糟 –

+0

@ Mr.Developer你能解釋一下嗎?我理解邏輯,但我需要更多的幫助來嘗試。在此先感謝 – genespos

回答

2

,他們將被忽略,所以剛開始的文本,並使用string.Join是足夠的:

C#

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

V B.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 

注意.//這意味着它會尋找不同//當前節點將始終從頂部開始的節點的後代節點。

+0

感謝您的回答,但我無法使其適應我的代碼。我更新了我的問題,以顯示如何獲取我需要提取InnerText的Html元素。你可以請你的答案適應我的代碼? – genespos

+0

@genespos檢查更新 –

+0

我覺得很蠢:我錯過了點。非常感謝。 – genespos

相關問題