Fügen Sie über HTML Agility Pack einen Doctype zu HTML hinzu

.net c# html-agility-pack

Frage

Ich weiß, dass es einfach ist, HTML-Dokumenten Elemente und Attribute mit dem HTML-Agilitätspaket hinzuzufügen. Aber wie kann ich einen Doctype (zB den HTML5) zu einem HtmlDocument mit dem HTML Agility Pack hinzufügen ? Vielen Dank

Akzeptierte Antwort

Der Html Agility Pack-Parser behandelt den Doctype als Kommentarknoten. Um einen Doctype zu einem HTML-Dokument hinzuzufügen, fügen Sie einfach einen Kommentarknoten mit dem gewünschten Doctype am Anfang des Dokuments ein:

HtmlDocument htmlDoc = new HtmlDocument();

htmlDoc.Load("withoutdoctype.html");

HtmlCommentNode hcn = htmlDoc.CreateComment("<!DOCTYPE html>");

HtmlNode htmlNode = htmlDoc.DocumentNode.SelectSingleNode("/html");
htmlDoc.DocumentNode.InsertBefore(hcn, htmlNode);

htmlDoc.Save("withdoctype.html");

Bitte beachten Sie, dass mein Code nicht nach dem Vorhandensein eines Doctypes sucht.


Beliebte Antwort

Soweit ich weiß, hat AgilityPack keine direkte Methode, um den Doctype zu setzen, aber wie Hans erwähnt, behandelt HAP den Doctype als Kommentarknoten. Sie könnten also versuchen, den vorhandenen Doctype zuerst zu finden, wenn nicht einen neuen erstellen und einen gewünschten Wert einfügen:

var doctype = doc.DocumentNode.SelectSingleNode("/comment()[starts-with(.,'<!DOCTYPE')]");
if (doctype == null)
    doctype = doc.DocumentNode.PrependChild(doc.CreateComment());

doctype.InnerHtml = "<!DOCTYPE html>";


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum