【发布时间】:2012-04-17 12:35:27
【问题描述】:
我正在使用 HTML 敏捷包来清理所见即所得的输入。这可能不是最好的方法,但我正在与接触正则表达式的开发人员合作,所以它必须足够了。
我的所见即所得内容看起来像这样(例如):
<p></p>
<p></p>
<p><span><input id="textbox" type="text" /></span></p>
我需要去掉空的段落标签。这是我目前的做法:
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
return;
foreach (HtmlNode node in nodes)
{
node.InnerHtml = node.InnerHtml.Trim();
if (node.InnerHtml == string.Empty)
node.ParentNode.RemoveChild(node);
}
但是,由于 HTML 不是完整的文档,段落标签没有父节点,因此 RemoveChild 将失败,因为 ParentNode 为空。
我找不到其他删除标签的方法,谁能指出另一种方法?
【问题讨论】:
-
将整个内容包装到一个div中,使用您当前的方法,然后删除父级? (可能使用更粗糙的东西,因为它更容易做)
-
想指出像
<p><p></p></p>这样的案例。清理这些东西有多重要?推进你的 foreach 将首先检查父级,发现它不为空,然后是子级,发现它为空并删除它,但现在父级为空但不会再次检查。 -
@Oded 不能分配给节点,因为它是一个 foreach 变量。
-
@VladCiobanu 我曾想过这个,但我想知道是否有更好的方法来解决这个问题。
-
@GuthMD 我不认为我们的 WYSIWYG 能够产生这种情况,但我不能肯定地排除它。这确实是一个好点,尽管我将在这之后过那座桥! =)
标签: c# asp.net .net html-agility-pack