2

内部にテキスト ノードと子ノードの両方を含むノード ( を使用) を削除すると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

4

1 に答える 1

3

これは、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);
}
于 2013-01-28T01:15:08.850 に答える