簡體   English   中英

嘗試刪除C#中的空html標簽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM