InnerText=InnerHtml - 如何使用 HtmlAgilityPack 提取可读文本
InnerText=InnerHtml - How to extract readable text with HtmlAgilityPack
我需要从一个非常糟糕的 Html.
中提取文本
我正在尝试使用 vb.net
和 HtmlAgilityPack
来做到这一点
我需要解析的标签有 InnerText = InnerHtml 和两者:
Name:<!--b>=</b--> Albert E<!--span-->instein s<!--i>Y</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
注意 .//
这意味着它将查找当前节点的后代节点,这与 //
不同,后者总是从顶部节点开始。
我需要从一个非常糟糕的 Html.
中提取文本我正在尝试使用 vb.net
和 HtmlAgilityPack
我需要解析的标签有 InnerText = InnerHtml 和两者:
Name:<!--b>=</b--> Albert E<!--span-->instein s<!--i>Y</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
注意 .//
这意味着它将查找当前节点的后代节点,这与 //
不同,后者总是从顶部节点开始。