Comment substituer / ajouter un élément racine dans HtmlAgilityPack?

c# html html-agility-pack

Question

Supposons que j'ai le code HTML suivant:

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

Comme vous pouvez le constater, il n’a pas de balises html / body. Ce que je veux faire, c'est ajouter des balises HTML et body au-dessus du document.

J'ai essayé d'ajouter une balise HTML avec le code suivant:

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

Mais après cela, un appel doc.DocumentNode.WriteContentTo() renvoie <html></html> . Si je change l'ordre d'exécution des dernières lignes:

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

J'ai eu System.StackOverflowException après le doc.DocumentNode.WriteContentTo() .

La solution possible peut être quelque chose comme ceci:

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

mais ce sera inefficace en raison de la réparation complète du document.

Avez-vous des idées sur la façon dont ce problème peut être résolu efficacement?

Réponse acceptée

Enfin, je l'ai fait au travail. Le premier échantillon ne fonctionnait pas car doc.DocumentNode.ChildNodes ne renvoie pas la copie de HtmlNodeCollection , mais la collection de nœuds elle-même. Cela a entraîné la suppression de tous les noeuds de la collection avant de les ajouter à el . Le code ci-dessous fait le tour:

var el = doc.CreateElement("html");
var nodes = doc.DocumentNode.ChildNodes;
el.AppendChildren(nodes);    
doc.DocumentNode.RemoveAllChildren();
doc.DocumentNode.AppendChild(el);  



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