You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#移除字符串中冗余的<div>和</div>标签

C# 清理HTML中冗余嵌套
标签的方案

要解决这个问题,不建议用正则表达式直接处理HTML(HTML的嵌套结构会导致正则无法准确匹配),推荐使用专门的HTML解析库HtmlAgilityPack来处理,以下是具体实现步骤:

1. 安装依赖库

通过NuGet安装HtmlAgilityPack:

Install-Package HtmlAgilityPack
# 或者使用.NET CLI
dotnet add package HtmlAgilityPack

2. 实现清理逻辑

核心思路是递归遍历HTML节点,识别并移除无属性且仅包含单个子

节点的冗余嵌套层,将子节点直接替换当前节点的位置,直到所有冗余结构被清理。

using HtmlAgilityPack;
using System.Linq;

public static class HtmlCleaner
{
    public static string RemoveRedundantDivs(string rawHtml)
    {
        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(rawHtml);

        // 递归清理节点的方法
        void CleanNestedDivs(HtmlNode currentNode)
        {
            // 先处理子节点(从后往前遍历,避免节点移除导致索引错乱)
            for (int i = currentNode.ChildNodes.Count - 1; i >= 0; i--)
            {
                CleanNestedDivs(currentNode.ChildNodes[i]);
            }

            // 判断当前节点是否为冗余div:无属性,且仅含一个子div节点
            if (currentNode.Name.Equals("div", System.StringComparison.OrdinalIgnoreCase)
                && currentNode.Attributes.Count == 0)
            {
                var nonBlankChildren = currentNode.ChildNodes.Where(n => !n.IsWhiteSpace).ToList();
                if (nonBlankChildren.Count == 1 
                    && nonBlankChildren[0].Name.Equals("div", System.StringComparison.OrdinalIgnoreCase))
                {
                    var childDiv = nonBlankChildren[0];
                    // 用子div替换当前冗余div
                    currentNode.ParentNode.ReplaceChild(childDiv, currentNode);
                    // 继续检查替换后的子div是否仍有冗余
                    CleanNestedDivs(childDiv);
                }
            }
        }

        // 从根节点开始清理
        if (htmlDoc.DocumentNode != null)
        {
            CleanNestedDivs(htmlDoc.DocumentNode);
        }

        // 返回处理后的HTML,保留原有格式
        return htmlDoc.DocumentNode.OuterHtml;
    }

    // 使用示例
    public static void Main()
    {
        string originalHtml = @"<div style=""xpto"">
   <div>
      <div>
         <div>
            <div style=""xpto"">
               <div>
                  <div>
                     <div style=""xpto"">
                        <div>
                           <div></div>
                        </div>
                     </div>
                  </div>
               </div>
            </div>
         </div>
      </div>
   </div>
</div>";

        string cleanedHtml = RemoveRedundantDivs(originalHtml);
        System.Console.WriteLine(cleanedHtml);
    }
}

代码说明

  • 递归遍历优先处理子节点,确保深层嵌套的冗余div先被清理
  • 仅清理无属性且仅含单个子div的节点,避免误删有内容或属性的有效div
  • 替换节点后继续递归检查,确保连续嵌套的冗余层被彻底清理
  • 保留原HTML的缩进和空白格式,输出结果与目标结构一致

内容的提问来源于stack exchange,提问作者Joffre L A Mota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:05:44