繁体   English   中英

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

[英]Remove empty span tags if it is in with in paragraph tags using Regex

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

<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>

不要将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();

一种方法是使用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;

输出:(来自调试器)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM