Angenommen, ich habe folgenden HTML-Code:
<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>
Wie Sie sehen können, hat es keine html / body Tags. Ich möchte HTML- und Body-Tags oben auf dem Dokument hinzufügen.
Ich habe versucht, HTML-Tag mit folgendem Code hinzuzufügen:
var el = doc.CreateElement("html");
var nodes = doc.DocumentNode.ChildNodes;
doc.DocumentNode.RemoveAllChildren();
el.AppendChildren(nodes);
doc.DocumentNode.AppendChild(el);
Aber danach gibt ein Aufruf doc.DocumentNode.WriteContentTo()
<html></html>
. Wenn ich die Ausführungsreihenfolge der letzten Zeilen ändere:
var el = doc.CreateElement("html");
var nodes = doc.DocumentNode.ChildNodes;
doc.DocumentNode.RemoveAllChildren();
doc.DocumentNode.AppendChild(el);
el.AppendChildren(nodes);
Ich habe System.StackOverflowException
nach dem doc.DocumentNode.WriteContentTo()
.
Mögliche Lösung kann in etwa so aussehen:
doc.LoadHtml("<html>" + doc.DocumentNode.WriteContentTo() + "</html>")
aber es wird aufgrund der vollständigen Reparierung von Dokumenten unwirksam sein.
Haben Sie Ideen, wie dieses Problem leistungsfähig gelöst werden kann?
Schließlich habe ich es zur Arbeit gebracht. Das erste Beispiel funktionierte nicht, da doc.DocumentNode.ChildNodes
nicht die Kopie von HtmlNodeCollection
, sondern die doc.DocumentNode.ChildNodes
zurückgibt. Es verursachte, dass alle Knoten aus der Sammlung gelöscht wurden, bevor sie zu el
hinzugefügt wurden. Der folgende Code macht den Trick:
var el = doc.CreateElement("html");
var nodes = doc.DocumentNode.ChildNodes;
el.AppendChildren(nodes);
doc.DocumentNode.RemoveAllChildren();
doc.DocumentNode.AppendChild(el);