c# - 有没有办法使用 HTMLAgilityPack 将 html 节点替换为文本节点?

标签 c# html dom html-agility-pack

我想使用 HTMLAgility pack 将文档中的节点替换为文本节点。这样做的目的是删除节点本身周围的标签。目前,我做了这样的事情:

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

有更好的方法吗?如果我尝试创建一个新的文本节点,然后执行类似于下面的代码片段的操作,我会收到无效的转换错误:

foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
{
    HtmlNode hNewNode = hd.CreateTextNode(hChildNode.InnerHtml);
    hChildNode.ParentNode.ReplaceChild(hNewNode, hChildNode);
}

(在指出拼写错误后更新,但问题仍然存在)

我使用的方法有误吗?我应该使用另一种方法来执行这样的功能吗?谢谢。

最佳答案

The purpose of this is to remove tags surrounding the node itself

您截取的第二个代码完全执行标签删除,除了一个拼写错误(我猜):

HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);

您应该将 hNewNode.InnerHtml 替换为 hChildNode.InnerHtml,否则您的代码甚至无法编译(使用未分配的变量)。

还想提一下,创建文本节点后,它不会具有被替换节点的子节点(相反,它的 InnerHtml 属性将具有与被替换节点相同的值) .

关于c# - 有没有办法使用 HTMLAgilityPack 将 html 节点替换为文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9776303/

相关文章:

python - 从使用 BeautifulSoup 解析的 HTML 中删除标签

html - CSS 选择器不适用于 Bulma Hero 中的内部元素

javascript - 使用appendChild将元素添加到DOM,然后引用创建它们的类

javascript - w3schools 模态图像无法在使用 polymer 网络组件的 Chrome 中工作

c# - 使用 C# 在 Silverlight 中向网格添加形状

c# - 什么时候调用 IEnumerable.GetEnumerator 而不是 IEnumerable<T>.GetEnumerator?

c# - 在 Windows 应用商店应用程序 (Windows 8.1) 中使用 GeoLocator 时出现 "The pipe is being closed"错误?

html - overflow hidden 的单杠很奇怪

javascript - 如何增加div的点击面积?

c# - 引用 NetStandard 项目的传统控制台应用程序会抛出 FileNotFoundException