HtmlAgilityPack - сохранить текстовую позицию при удалении узла

Когда я удаляю узел (с 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

1 ответ

Решение

Это известная проблема в пакете 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);
}
Другие вопросы по тегам