我正在使用HTML敏捷包来清理所见即所得的输入。这可能不是最好的方法,但我正在与正则表达式接触爆炸的开发人员一起工作,这样就足够了。
我的WYSIWYG内容看起来像这样(例如):
<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
,因此{{1}}将失败。
我找不到另一种删除标签的方法,有人可以用另一种方法指出我吗?
答案 0 :(得分:3)
从技术上讲,第一级元素是文档根目录的子元素,因此以下代码应该起作用:
if (node.InnerHtml == String.Empty) {
HtmlNode parent = node.ParentNode;
if (parent == null) {
parent = doc.DocumentNode;
}
parent.RemoveChild(node);
}
答案 1 :(得分:0)
你想要从集合中删除,对吧?
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//p");
if (nodes == null)
return;
for (int i = 0; i < nodes.Count - 1; i++)
{
nodes[i].InnerHtml = nodes[i].InnerHtml.Trim();
if (nodes[i].InnerHtml == string.Empty)
nodes.Remove(i);
}