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);
}