gpt4 book ai didi

c# - HtmlAgilityPack - 删除节点时保持文本位置

转载 作者:行者123 更新时间:2023-11-27 22:34:57 25 4
gpt4 key购买 nike

当我删除一个节点(使用 keepGrandChildren )时,该节点同时包含文本和子节点,文本将一直推到子节点之后,而不是留在其原始位置。

示例:

var doc = new HtmlDocument();
doc.LoadHtml(@"
<span id='first'>
This text comes first.
<span id='second'>This text comes second.</span>
</span>");

var node = doc.GetElementbyId("first");
node.ParentNode.RemoveChild(node, true);
doc.Save(Console.Out);

我得到的输出是:

    <span id='second'>This text comes second.</span>
this text comes first.

代替:

    this text comes first.
<span id='second'>This text comes second.</span>


有没有办法使用 keepGrandChildren 删除节点?里面的文字没有被推到最后?
我想保留绝对顺序并确保没有文本或节点改变它们的原始位置,否则文档将被破坏。

编辑:我正在使用 HtmlAgilityPack 1.4.6.0.NET 4.0

最佳答案

这是一个know issue在 HtmlAgilityPack 中。下面的代码应该可以解决问题:

public static void RemoveChildKeepGrandChildren(HtmlNode parent, HtmlNode oldChild)
{
if (oldChild.ChildNodes != null)
{
HtmlNode previousSibling = oldChild.PreviousSibling;
foreach (HtmlNode newChild in oldChild.ChildNodes)
{
parent.InsertAfter(newChild, previousSibling);
previousSibling = newChild; // Missing line in HtmlAgilityPack
}
}
parent.RemoveChild(oldChild);
}

关于c# - HtmlAgilityPack - 删除节点时保持文本位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com