移除父节点,但保留子节点htmlagility包

本文关键字:子节点 htmlagility 保留 父节点 | 更新日期: 2023-09-27 18:12:56

好的,我在这里很困惑,我如何删除父节点并用它的子节点替换它?

我的目标是从图片中删除出站链接。我不想从文档中删除普通链接,只需删除那些在保持图像完整的情况下将图像制作成链接的链接。示例:

<a href="http://www.w3schools.com"><img src="logo_w3s.gif"></a>

应该被替换为:

<img src="logo_w3s.gif">

这是我的代码,它不起作用,但我觉得越来越接近:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(maintext);
dynamic allimages = doc.DocumentNode.Descendants("img").ToList;
if (scrapeimages.Checked) {
    //the user does want images scraped. Remove image outbound links
    try {
        foreach (void n_loopVariable in allimages) {
            n = n_loopVariable;
            if (n.ParentNode.Name == "a") {
                dynamic outer = n.OuterHtml;
                dynamic newnode = HtmlNode.CreateNode(outer);
                n.ParentNode.ReplaceChild(n.ParentNode, newnode);
            }
        }
        maintext = doc.DocumentNode.OuterHtml;
    } catch {
    }
}

移除父节点,但保留子节点htmlagility包

var node = doc.DocumentNode.SelectSingleNode(yourANode);
node.ParentNode.RemoveChild(node, true);

类似这样的操作应该会有所帮助,这将删除<a>的父节点的Child,但它将保留grandChildren。RemoveChild中的这个true参数表示keepGrandChild

如果所有<img>都有<a>

var nodeList = doc.DocumentNode.SelectNodes("img");
for(HtmlNode node in nodeList)
{
    var parentATagNode = node.Parent.Parent;
    parentATagNode.RemoveChild(node.Parent, true);
}