html - 使用 HTML Agility 剥离 HTML 标签但保留内部文本?

标签 html html-agility-pack

我正在尝试去除一些 HTML 标签。我有一个项目,其中的人保存了一些搜索。问题是关键字已突出显示。例如。

<p>Here is some <span class='highlite'>awesome</span> example.</p>

Html Agility 将它变成了 3 个节点。一个文本节点,跨度和文本。我想从中创建一个标签。这样看起来像

<p>Here is some awesome example.</p>

我尝试使用 css class highlite 获取所有标签,然后

 //Stip all retarded hilite tags
 var hiliteTags = from tags in doc.DocumentNode.SelectNodes("//span[@class='hilite']")
                  select tags;

 foreach (var tag in hiliteTags)
 {
      tag.ParentNode.RemoveChild(tag, true);
 }

但这会导致文本节点、文本节点、文本节点。我想要一个文本节点。然后我尝试使用

Node.InnerText += someVariable;

但是 InnerText,尽管文档中说的是只读的。

关于如何做到这一点有什么想法吗?

其次,当我问的时候,有没有办法摆脱只包含文本的节点,它是一个\r\n。我对此根本不感兴趣,它只会妨碍并使解析变得尴尬。我也希望能够删除它们。例如

<tr>
    <td>Foo</td>
    <td>Bar</td>
</tr>

使用 Html Agility 变得

Node (tr)
Node (\r\n)
Node (td- Foo)
Node (\r\n)
Node (td - Bar)
Node (\r\n)
Node (tr)

我正在努力选择那些节点。我尝试过使用 Linq,也尝试过使用 XPath。我似乎无法删除它们。

最佳答案

如果你只取 p 标签的 InnerText,并创建一个单独的文档树来保存它会怎样?

var root = HtmlNode.CreateNode("<root></root>");
foreach (var node in doc.DocumentNode.SelectNodes("/p"))
{
    var newNode = HtmlNode.CreateNode(string.Format("<p>{0}</p>", node.InnerText));
    root.AppendChild(newNode);
}

这有帮助吗?

关于html - 使用 HTML Agility 剥离 HTML 标签但保留内部文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937564/

相关文章:

html - 覆盖 [class] css 声明

html - float block 级元素 : is it necessary to set the width, 如果是,如何?

javascript - 如何消除ajax调用的闪烁效果

javascript - 在ajax jquery中处理多个聊天框

c# - HTML 敏捷包替换链接

c# - 登录网站并使用 Html Agility Pack 设置用户代理

html - 使用视口(viewport)单位,网站在更新时会崩溃吗?

c# - 使用精确的 HTML 搜索或将 HTMLElement 转换为 HTMLNode 获取 HtmlAgilityPack 节点

.net - HTMLAgilityPack .load 连接在某些站点上关闭

c# - 删除 <span> 标签,但保留文本?