首页 > 解决方案 > c#删除字符串的所有包装div

问题描述

我正在检查这个问题C# remove first wraping div我的问题是相似的,但我需要删除所有的包装 div,而不删除那些可能在字符串中间的。例如,我期望做的是:

Actual string:
<div><div><div><div><p>This is a test</p><ul><li>a</li><li><div>b</div></li><li>c</li></ul></div></div></div></div>
desired result after function
<p>This is a test</p><ul><li>a</li><li><div>b</div></li><li>c</li></ul>

我一直试图使这个函数递归,当它没有得到任何可删除的字符时停止调用。但是我得到 System.ArgumentOutOfRangeException: Index was out of range。当我传递一个没有 div 的字符串时出现异常

 private string RemoveWrapingDiv(string html)
        {
            string result = string.Empty;

            if (!string.IsNullOrEmpty(html))
            {
                var start_idx = html.IndexOf(">", html.IndexOf("<div", StringComparison.InvariantCulture), StringComparison.InvariantCulture) + 1;
                var last_idx = html.LastIndexOf("</div>", StringComparison.InvariantCulture);
              
                result = html.Substring(start_idx, last_idx - start_idx);
            }

            return result;
        }

我的问题是,如何通过安全检查使此函数递归以避免异常?我们是否需要使其递归,还是有更简单的方法?谢谢!!

标签: c#.net

解决方案


如果您只想从字符串的开头和结尾删除 div 标记,将它们保留在中间,以及任何其他 HTML 标记,那么这应该可以工作:

    private static string RemoveWrapingDiv(string originalString)
    {
        var openingTag = "<div>";
        var closingTag = "</div>";
        var processedString = originalString;
        while (processedString.StartsWith(openingTag))
        {
            processedString = processedString.Substring(openingTag.Length, processedString.Length - openingTag.Length - closingTag.Length);
        }
        return processedString;
    }

推荐阅读