Remplacer un seul nœud par plusieurs nœuds à l'aide de HTML Agility Pack

.net c# html-agility-pack

Question

J'ai des balises d'entrée qui sont des espaces réservés que je remplace par du HTML. La plupart du temps, le code HTML avec lequel je les remplace n'est qu'une balise, ce qui est assez simple:

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

Toutefois, si je souhaite remplacer inputNode par deux nœuds ou plus, HtmlNode.CreateNode(sReplacementString) ne lit que le premier nœud. Existe-t-il un moyen de remplacer lorsque sReplacementString est constitué de plusieurs balises?

Réponse acceptée

Autant que je sache, il n'y a pas de moyen direct de le faire. HtmlNode.CreateNode méthode HtmlNode.CreateNode crée un seul nœud à partir de l'extrait de code HTML. S'il y a plusieurs nœuds, le premier est créé uniquement.

Pour sReplacementString ce sReplacementString , vous pouvez créer un nœud temporaire, créer ses nœuds enfants à partir de sReplacementString , puis ajouter ces nœuds enfants juste après le nœud inputNode , puis supprimer le 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();



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi