【问题标题】:Get plain text from HTML in .NET从 .NET 中的 HTML 获取纯文本
【发布时间】:2011-05-03 13:46:29
【问题描述】:

从 HTML 字符串中获取纯文本字符串的最佳方法是什么?

public string GetPlainText(string htmlString)
{
    // any .NET built in utility?
}

提前致谢

【问题讨论】:

  • 纯文本是什么意思?
  • @slandau:我想从 HTML 输入中输出可读文本。我不确定是否有其他东西可以删除标签...

标签: .net html string


【解决方案1】:

您可以使用 MSHTML,这很宽容;

//using microsoft.mshtml
HTMLDocument htmldoc = new HTMLDocument();
IHTMLDocument2 htmldoc2 = (IHTMLDocument2)htmldoc;
htmldoc2.write(new object[] { "<p>Plateau <i>of<i> <b>Leng</b><hr /><b erp=\"arp\">2 sugars please</b> <xxx>what? &amp; who?" });

string txt = htmldoc2.body.outerText;

Leng 2 糖高原是什么? 和谁?

【讨论】:

  • 像魅力一样工作!应该是公认的答案。请注意,您需要先添加对Microsoft.mshtml.dll 的引用。
  • 您确定此方法对于来自不受信任来源的 HTML 是安全的吗? HTMLDocument.Write() 是否执行传递的脚本?
  • 这个答案比公认的答案(只使用简单的正则表达式来删除标签)要健壮得多,对于任何合理复杂的页面来说可能是必要的。
  • @giladmayani 在使用此方法之前,您可以使用此处接受的答案stackoverflow.com/a/19414886/1911540 去除任何&lt;script&gt; 标签(及其内部内容)。这也将导致下游字符串操作性能提高,因为 Javascript 内容可能很长。
  • @SpecialSauce 确实如此,但不要忘记从技术上讲,Javascript 不仅可以存在于&lt;script&gt; 标签中,例如属性值:
【解决方案2】:

据我所知,没有内置实用程序,但根据您的要求,您可以使用正则表达式去除所有标签:

string htmlString = @"<p>I'm HTML!</p>";
Regex.Replace(htmlString, @"<(.|\n)*?>", "");

【讨论】:

  • 检查这个史诗般的问题stackoverflow.com/questions/1732348/…
  • @Andrey 哈哈,这是一个非常棒的公认答案。幸运的是,OP 没有说明确切的要求,也没有定义 HTML 字符串,所以这应该捕获大多数实际的 HTML 案例,而不是 XHTML。
  • 正则表达式仍然不一定会产生最终结果。您需要至少转换&amp;lt;&amp;gt;&amp;amp;。如果您的文本包含其他 HTML 字符实体,例如 &amp;scaron; (š),您还需要对所有这些实体进行解码。
【解决方案3】:

框架中没有内置解决方案。

如果您需要解析 HTML,我使用名为 HTML Agility Pack 的库获得了很好的体验。
它解析 HTML 文件并通过 DOM 提供对它的访问,类似于 XML 类。

【讨论】:

    【解决方案4】:

    就个人而言,我发现 regex 和 HttpUtility 的组合是最好和最短的解决方案。

    Return HttpUtility.HtmlDecode(
                    Regex.Replace(HtmlString, "<(.|\n)*?>", "")
                    )
    

    这会删除所有标签,然后解码任何附加内容,例如 &amp;lt;&amp;gt;

    【讨论】:

      【解决方案5】:

      没有 .NET 内置方法可以做到这一点。但是,就像@rudi_visser 指出的那样,可以使用正则表达式来完成。

      如果您需要删除的不仅仅是标签(即,将 &ampacirc; 转为 ),您可以使用更详细的解决方案,例如 here .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        相关资源
        最近更新 更多