【问题标题】:Remove all HTML tags and format text with returns, spaces, etc. using .NET使用 .NET 删除所有 HTML 标记并使用回车符、空格等格式化文本
【发布时间】:2011-06-01 13:36:29
【问题描述】:

我在剥离 HTML 并显示为客户格式化文本时遇到问题。

例如:

asdas<br/>asdas

所以标签将被一个边距替换。但我还需要用空格和制表符替换边距并删除所有标签。是否有任何示例或已完成的解决方案可以在删除 HTML 标记后获得某种格式的文本。

当前解决方案(寻找更好的解决方案):

/// <summary>
/// Methods to remove HTML from strings.
/// </summary>
public static class HtmlRemoval
{
    /// <summary>
    /// Compiled regular expression for performance.
    /// </summary>
    static Regex _htmlRegex = new Regex("<.*?>", RegexOptions.Compiled);

    /// <summary>
    /// Remove HTML from string with compiled Regex.
    /// </summary>
    public static string StripAllTagsRegex(string source)
    {
        source = HttpUtility.HtmlEncode(source);
        return _htmlRegex.Replace(source, string.Empty);
    }

    public static string ChangeTagsToTextFormat(string source)
    {
        if (string.IsNullOrEmpty(source))
            return source;

        source = HttpUtility.HtmlEncode(source);
        return source.Replace("<br/>", Environment.NewLine)
            .Replace("</div>", Environment.NewLine)
             .Replace("</p>", Environment.NewLine);
    }
}

【问题讨论】:

  • 你有没有尝试过什么?
  • 我可能正在寻找可以做这些事情的 lib。
  • “边距”是指“换行符”吗?
  • 我的意思是
    将被换行。真正的 html 边距由空格...

标签: c# .net html


【解决方案1】:

我相信 HTML Agility Pack 是这里最简单的解决方案,尤其是因为您删除了(可能是格式错误的)Html 标签。以下代码背后的想法是您只需获取所有节点,返回它们的 InnerText 以及换行符(“\n”,或您想要执行的任何格式,因为在使用 SelectNodes 后您将拥有一个可以使用的集合) :

    private string stripTags(string html)
    {
        var output = new StringBuilder();
        HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

        doc.LoadHtml(html);

        foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//*"))
        {
            output.AppendLine(node.InnerText + Environment.NewLine);
        }

        return output.ToString();
    }

要获得更具体的格式化结果,只需在 SelectNodes 方法中使用不同的 XPath 表达式。 (此处提供的代码未经实际测试,您可能需要更精确的代码)

【讨论】:

    【解决方案2】:

    【讨论】:

    • 我不解析 html。我只是删除标签。
    • 你想用字符串替换 HTML 标签(例如:&lt;br/&gt;\r\n),对吗?
    【解决方案3】:

    如果您使用 Microsoft Sharepoint,它可能会被 SPHttpUtility 存档

    例子:

    using Microsoft.SharePoint;
    
    [Test]
    public void RemoveHtml()
    {
        string textWithHtml = "<div class='ExternalCla48D45'>value</div>";
        textWithHtml = SPHttpUtility.ConvertSimpleHtmlToText(multilinetext, -1);
        Assert.That(textWithHtml, Is.EqualTo("value"));
    }
    

    它非常适用于多行字段。

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2019-06-10
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多