c# - 如果没有父节点,如何删除节点

标签 c# asp.net .net html-agility-pack

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

不过我找不到其他方法来删除标签,谁能告诉我其他方法?

最佳答案

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

if (node.InnerHtml == String.Empty) {
    HtmlNode parent = node.ParentNode;
    if (parent == null) {
        parent = doc.DocumentNode;
    }
    parent.RemoveChild(node);
}

关于c# - 如果没有父节点,如何删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10191364/

相关文章:

c# - 我可以将 ReSharper TODO 转换为编译器警告吗?

asp.net - 如何混合 jQuery Mobile 和 ASP.NET

c# - WPF Popup 作为用 xaml 编写的单独控件

c# - 将 ASP.NET MVC 区域添加到 ASP.NET Web 窗体现有项目

c# - 具有默认参数的索引器

c# - Windows 服务 - 发生 FTP 提供程序维护时段时出现不可恢复的 FtpWebRequest 超时

c# - 模拟稳定的 CPU 负载和峰值

javascript - 如何从 ASP.NET .asmx 返回 JSON?

c# - 每个请求的依赖注入(inject)容器

c# - 使用 LINQ 创建对象