【问题标题】:Strip everything but text from html从 html 中删除除文本之外的所有内容
【发布时间】:2010-11-26 12:15:16
【问题描述】:

我们的 CMS 允许用户使用 html 编辑器输入文本,因此在将文本读入网页时,我可以这样输入:

&#xD;&#xA;      <p>&#xD;&#xA;      <strong>text text. more 
text</strong>&#xD;&#xA;      <a href="http://blabla>blabla</a> even more text...

我怎样才能删除除文本之外的所有内容,包括 , 和 .和类似的字符?

【问题讨论】:

    标签: c# html string


    【解决方案1】:

    我一直在使用正则表达式过滤网页中的 HTML 以仅检索文本本身,如下所示:

    Regex.Replace(requestHtml, "<.*?>", string.Empty)
    

    【讨论】:

      【解决方案2】:

      假设这是 html(不是 xhtml),我会使用 HTML Agility Pack 来解析它,然后访问 InnerText

      static void Main()
      {
          HtmlDocument doc = new HtmlDocument();
          doc.LoadHtml(@"&#xD;&#xA;      <p>&#xD;&#xA;      <strong>text text. more text</strong>&#xD;&#xA;      <a href=""http://blabla>blabla</a> even more text...");
          string s = doc.DocumentNode.InnerText;
          // s is: &#xD;&#xA;      &#xD;&#xA;      text text. more text&#xD;&#xA;     
      }
      

      【讨论】:

        【解决方案3】:

        使用

        var a = new Regex("]+/?>"); var v = a.Replace("我的脏文本在这里", "");

        v 现在将包含没有属性和标签的文本。

        【讨论】:

          【解决方案4】:

          您可以将其加载到XDocument/XElement 对象中并获取Value 属性,它实际上会返回元素的内部文本。您必须通过使用 xml/html 树的深度枚举对每个元素执行此操作(并在每个内部文本节点之间添加空格)。

          • &lt;P&gt;hello&lt;/P&gt; 会给你“你好”
          • &lt;P&gt;hello&lt;/P&gt;&lt;P&gt;hello&lt;/P&gt; 将使用 rootNode.innerText 为您提供“hellohello” - 这就是为什么您必须为每个节点使用它才能获得“hello hello”。

          【讨论】:

            【解决方案5】:

            使用 XML:

            rootNode.innerText

            但您的输入必须在作为规范化 XML 之前进行检查。

            【讨论】:

              猜你喜欢
              • 2012-04-10
              • 1970-01-01
              • 2018-01-16
              • 2014-03-14
              • 1970-01-01
              • 1970-01-01
              • 2021-04-20
              • 2011-06-05
              • 1970-01-01
              相关资源
              最近更新 更多