使用Html Agility Pack剥离所有html标记

Mul*_*ner 17 html vb.net strip html-agility-pack

我有一个像这样的html字符串:

<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>
Run Code Online (Sandbox Code Playgroud)

我希望删除所有html标记,以便生成的字符串变为:

foo bar baz
Run Code Online (Sandbox Code Playgroud)

从SO的另一篇文章中我得出了这个函数(使用Html Agility Pack):

  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
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不会返回我的预期,而是给出:

bazbarfoo
Run Code Online (Sandbox Code Playgroud)

请问,我哪里出错 - 这是最好的方法吗?

问候和快乐的编码!

更新:通过下面的答案我想出了这个功能,可能对其他人有用:

  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
Run Code Online (Sandbox Code Playgroud)

tva*_*son 33

为什么不返回htmldoc.DocumentNode.InnerText而不是删除所有非文本节点?它应该给你你想要的.