3

我正在使用 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为空而失败。

我找不到另一种删除标签的方法,任何人都可以指出另一种方法吗?

4

2 回答 2

4

从技术上讲,第一级元素是文档根的子元素,所以下面的代码应该可以工作:

if (node.InnerHtml == String.Empty) {
    HtmlNode parent = node.ParentNode;
    if (parent == null) {
        parent = doc.DocumentNode;
    }
    parent.RemoveChild(node);
}
于 2012-04-17T12:55:02.407 回答
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);
}
于 2012-04-17T12:59:47.977 回答