HTMLAgilityPack - 删除节点但不去除内部文本

5

我的HTML内容是

<a href="#asdf">asdf</a>
<H5 align="left"><A href="#d570525d497.htm#toc">Table 
of Contents</A><br></H5>

我正在使用HTML Agility Pack来加载HTML。我想找到<a>节点,并在不删除其内部文本的情况下删除该节点,如下所示。
asdf
<H5 align="left">Table 
of Contents<br></H5>

我正在使用以下代码:
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(htmlPage);
var Nodes = htmlDocument.DocumentNode.SelectNodes("//a");
foreach (var Node in Nodes)
{
    Node.InnerText.Trim();
}

它不起作用。代码有问题吗?


我相信这是算法。你应该获取内部HTML并将其放置到父元素中。 - AgentFire
1个回答

10

将节点从父节点中移除,同时保留孙子节点

foreach (var Node in Nodes)
{
    Node.ParentNode.RemoveChild(Node, true); //<-- keepGrandChildren
}

var newhtml = htmlDocument.DocumentNode.OuterHtml;

输出:

asdf
<h5 align="left">Table 
of Contents<br></h5>

Node没有父节点可用于Node.ParentNode.RemoveChild(Node, true); - user2729272
@user2729272 至少所有内容都在<html>标签内。你想试试吗?(顺便说一句:它适用于你的示例。我已经在答案中发布了输出) - I4V
您发布的示例字符串将被赋予类型为Document的“父”节点... 因此从Node.ParentNode的角度来看它是有效的。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接