使用正则表达式删除空的跨度标签(如果在段落标签中)

时间:2019-05-21 07:52:24

标签: c#

<span style="color:#000000;"/>标签为空时需要删除<span>标签

<html>
   <body>       
      <p left-margin="0" style="margin:0 0 0 0;text-align:Left;font-style:italic;"><span style="color:#000000;"/></p>
      <p>Newly <span style="font-weight:bold;">Created</span> this document...</p>
      <p />
      <p>Regards,</p>
      <p>Dhanush.</p>
   </body>
</html>

我们已经在regEx下面使用它来删除不需要的XML

if (!string.IsNullOrEmpty(text))
{
    var xmlPattern = "[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-\x10FFFF]";
    return Regex.Replace(text, xmlPattern, string.Empty);
}

我需要像下面这样的最终结果

<html>
   <body>       
      <p left-margin="0" style="margin:0 0 0 0;text-align:Left;font-style:italic;">
      <p>Newly <span style="font-weight:bold;">Created</span> this document...</p>
      <p />
      <p>Regards,</p>
      <p>Dhanush.</p>
   </body>
</html>

2 个答案:

答案 0 :(得分:1)

请勿将Regex用于任何XML解析!

在这里使用XDocument就足够了:

var html = XDocument.Parse(htmlString);
var spanElements = html.Descendants("span").ToList(); 
for (int i = spanElements.Count - 1; i >= 0; i--)
    if (spanElements[i].Value == "") spanElements[i].Remove();

答案 1 :(得分:1)

一种方法是使用HtmlAgilityPack代替Regex

在软件包管理器控制台中使用此Install-Package HtmlAgilityPack -Version 1.11.4命令为HtmlAgilityPack安装nuget软件包

代码:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"Path to html file");

if (doc.DocumentNode.SelectNodes("//span") != null)
{
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span"))
    {
        var attributes = node.Attributes;

        foreach (var item in attributes)
        {
            if (item.Name.Equals("style") && item.Value.Contains("color:#000000;"))
            {
                node.ParentNode.RemoveChild(node);
            }
        }
    }
}

string html = doc.DocumentNode.OuterHtml;

输出:(来自调试器)

enter image description here