【问题标题】:How do I remove whitespace in HTML Source with Html Agility Pack and C#如何使用 Html Agility Pack 和 C# 删除 HTML 源代码中的空格
【发布时间】:2017-08-27 19:16:36
【问题描述】:

在发布之前,我尝试了此线程的解决方案:

C# - Remove spaces in HTML source in between markups?

这是我正在使用的 HTML 的 sn-p:

<p>This is my text</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This is next text</p>

我正在使用 HTML Agility Pack 来清理 HTML:

HtmlDocument doc = new HtmlDocument();
doc.Load(htmlLocation);
foreach (var item in doc.DocumentNode.Descendants("p").ToList())
{
    if (item.InnerHtml == "&nbsp;")
    {
        item.Remove();
    }
}

上面代码的输出是

<p>This is my text</p>





<p>This is next text</p>

所以我的问题是如何删除 HTML 源代码中两个段落之间的多余空格。

【问题讨论】:

  • edit 你的问题显示你的代码在foreach 循环之后如何输出结果。
  • 从 foreach 中使用的集合中删除节点通常会导致问题和异常 - 请检查是否有任何异常
  • 您好,您好,没有收到任何错误消息。谢谢。
  • 您正在删除整个项目,即节点&lt;p&gt;。你应该做的是item.InnterHtml=string.Empty

标签: c# html html-agility-pack


【解决方案1】:

删除第一段和最后一段之间的文本节点:

HTML:

var html = @"
<p>This is my text</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This is next text</p>";

解析它:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var paragraphs = doc.DocumentNode.Descendants("p").ToList();
foreach (var item in paragraphs)
{
    if (item.InnerHtml == "&nbsp;") item.Remove();
}
var followingText = paragraphs[0]
    .SelectNodes(".//following-sibling::text()")
    .ToList();
foreach (var text in followingText) 
{
    text.Remove();
}

结果:

&lt;p&gt;This is my text&lt;/p&gt;&lt;p&gt;This is next text&lt;/p&gt;

如果您想在段落之间保留换行符,请使用for 循环并在所有last文本节点上调用Remove() p>

for (int i = 0; i < followingText.Count - 1; ++i)
{
    followingText[i].Remove();
}

结果:

<p>This is my text</p>
<p>This is next text</p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2020-02-16
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多