我有一个这样的HTML字符串:
<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>
foo bar baz
从另一个帖子在这里,我已经提出了这个功能(使用Html敏捷包):
Public Shared Function stripTags(ByVal html As String) As String Dim plain As String = String.Empty Dim htmldoc As New HtmlAgilityPack.HtmlDocument htmldoc.LoadHtml(html) Dim invalidNodes As HtmlAgilityPack.HtmlNodeCollection = htmldoc.DocumentNode.SelectNodes("//html|//body|//p|//a") If Not htmldoc Is Nothing Then For Each node In invalidNodes node.ParentNode.RemoveChild(node,True) Next End If Return htmldoc.DocumentNode.WriteContentTo End Function
不幸的是,这不会返回我的期望,而是给出:
bazbarfoo
请问我哪里错了 – 这是最好的方法吗?
问候和快乐的编码!
更新:通过以下答案,我想出了这个功能,可能对别人有用:
Public Shared Function stripTags(ByVal html As String) As String Dim htmldoc As New HtmlAgilityPack.HtmlDocument htmldoc.LoadHtml(html.Replace("</p>","</p>" & New String(Environment.NewLine,2)).Replace("<br/>",Environment.NewLine)) Return htmldoc.DocumentNode.InnerText End Function
解决方法
为什么不返回htmldoc.DocumentNode.InnerText而不是删除所有的非文本节点?它应该给你你想要的