【问题标题】:what is node name of element without any html tag?没有任何 html 标记的元素的节点名称是什么?
【发布时间】:2026-02-10 23:25:03
【问题描述】:

我想从 html 文档中删除没有 html 标签的文本。我正在使用 LINQ。

 doc.DocumentNode.Descendants().Where(d => d.Name == "script" 
                                        || d.Name == "style" 
                                        || d.NodeType == HtmlNodeType.Comment)
                               .ToList()
                               .ForEach(d => d.Remove());

我正在使用这段代码。我想在 LINQ 中再添加一个条件,这样我就可以删除任何没有标签的文本。

<div>hello</div>hello world

结果,我只想要“你好”。现在我得到“hellohello world”。

请帮我解决这个问题。 有没有办法通过使用 LINQ 命令删除此文本?我有一个想法,如果我知道没有标签的后代的名字,那么我可以通过简单地再添加一个条件来解决它。

【问题讨论】:

  • 你想用这个ForEach(d =&gt; d.Remove())做什么??由于ForEach 不返回任何内容,因此如果您尝试将其分配给变量,则无法编译。
  • 我正在删除脚本、样式和注释标签的所有节点。这段代码工作正常。我已经在多个文档上对其进行了测试。现在我只想按照问题删除“没有标签的文本”。

标签: c# html linq html-agility-pack


【解决方案1】:

让我们试试这个来删除所有未标记的文本:

    doc.DocumentNode.Descendants()
        .Where(d => d.NodeType == HtmlNodeType.Text && d.ParentNode.Equals(doc.DocumentNode))
        .ToList()
        .ForEach(d => d.Remove());

【讨论】: