Замените один узел несколькими узлами с помощью HTML Agility Pack. - PullRequest
5 голосов
/ 14 марта 2012

У меня есть несколько входных тегов, которые заменяют некоторые HTML.В большинстве случаев HTML-код, который я заменяю, - это только один тег, который достаточно прост:

HtmlNode node = HtmlNode.CreateNode(sReplacementString);
inputNode.ParentNode.ReplaceChild(node, inputNode);

Однако, если я хочу заменить inputNode двумя или более узлами HtmlNode.CreateNode(sReplacementString)читает первый узел.Есть ли способ сделать замену, где sReplacementString - это несколько тегов?

1 Ответ

7 голосов
/ 14 марта 2012

Насколько я знаю, нет прямого способа сделать это.HtmlNode.CreateNode метод создает отдельный узел из фрагмента HTML, если там несколько узлов, создается только первый.

В качестве обходного пути вы можете создать временный узел, создав его дочерние узлы из sReplacementString, а затем добавьте эти дочерние узлы сразу после узла inputNode и, наконец, удалите inputNode.

var temp = doc.CreateElement("temp");
temp.InnerHtml = sReplacementString;
var current = inputNode;
foreach (var child in temp.ChildNodes)
{
    inputNode.ParentNode.InsertAfter(child, current);
    current = child;
}
inputNode.Remove();
...