<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>
答案 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;
输出:(来自调试器)