[英]Try to removing empty html tags in C#
我有這個HTML代碼:
<div class="sfd">test</div>
<p dir="rtl" style="margin-bottom: 0;margin-left: 0;margin-right: 0;margin-top: 0;"><span style="font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"> </span></p>
<p dir="rtl" style="font-family: David;font-size: 11pt;line-height: 115.0%;margin-top: 0;"><span style="font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"> </span></p>
<div class="sfd">test</div>
<p dir="rtl" style="font-family: David;font-size: 11pt;line-height: 115.0%;margin-bottom: 0;margin-left: 0;margin-right: 0;margin-top: 0;"><span style="font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"> </span></p>
<p dir="rtl" style="font-family: David;font-size: 11pt;line-height: 115.0%;margin-bottom: 0;margin-left: 0;margin-right: 0;margin-top: 0;"><span style="font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"> </span></p>
<div class="sfd">test</div>
<p dir="rtl" style="font-family: David;font-size: 11pt;line-height: 115.0%;margin-right: 0;margin-top: 0;"><span style="font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"> </span></p>
我用以下方法解析他:
XDocument xDoc = XDocument.Parse(html);
我想像這樣遞歸地刪除所有空的html標簽:
<div class="sfd">test</div>
<div class="sfd">test</div>
<div class="sfd">test</div>
我嘗試了這個:
xDoc.Descendants()
.Where(e => !e.HasAttributes &&
string.IsNullOrEmpty(e.Value) &&
e.Descendants().All(f => String.IsNullOrEmpty(f.Value) && !f.HasAttributes))
.Remove();
但是什么都不做
特納克斯
您可以只檢查Value
。 當有子節點(為空)時, Value
也將為空。 另外,您正在檢查屬性,而不是刪除具有屬性的節點,但是從示例中要刪除具有屬性的空標簽。
string src = @"
<html><body>
<div class=""sfd"">test</div>
<p dir = ""rtl"" style=""margin-bottom: 0;margin-left: 0;margin-right: 0;margin-top: 0;""><span style = ""font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"" > </span ></p >
<p dir=""rtl"" style=""font-family: David;font-size: 11pt;line-height: 115.0%;margin-top: 0;""><span style = ""font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"" > </span ></p >
<div class=""sfd"">test</div>
<p dir = ""rtl"" style=""font-family: David;font-size: 11pt;line-height: 115.0%;margin-bottom: 0;margin-left: 0;margin-right: 0;margin-top: 0;""><span style = ""font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"" > </span ></p >
<p dir=""rtl"" style=""font-family: David;font-size: 11pt;line-height: 115.0%;margin-bottom: 0;margin-left: 0;margin-right: 0;margin-top: 0;""><span style = ""font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"" > </span ></p >
<div class=""sfd"">test</div>
<p dir = ""rtl"" style=""font-family: David;font-size: 11pt;line-height: 115.0%;margin-right: 0;margin-top: 0;""><span style = ""font-size: 11pt;font-style: normal;font-weight: normal;margin: 0;padding: 0;"" > </span ></p >
</body></html>
";
XDocument xDoc = XDocument.Parse(src);
xDoc.Descendants().Where(node => string.IsNullOrWhiteSpace(node.Value)).Remove();
MessageBox.Show(xDoc.ToString());
要保留<br/>
,只需明確將其排除。 替換以上代碼:
xDoc.Descendants().Where(node => string.IsNullOrWhiteSpace(node.Value) && node.Name != "br").Remove();
嘗試使用正則表達式刪除,我認為這應該工作:
var result = Regex.Replace(html,"<[^/>].*></[^>]+>", "");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.