Замените один узел несколькими узлами, используя пакет Agility Pack

.net c# html-agility-pack

Вопрос

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

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

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

Принятый ответ

Насколько я знаю, нет прямого способа сделать это. Метод 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();


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему