Ajouter un doctype au HTML via HTML Agility Pack

.net c# html-agility-pack

Question

Je sais qu'il est facile d'ajouter des éléments et des attributs à des documents HTML avec le pack d'agilité HTML. Mais comment puis-je ajouter un doctype (par exemple celui HTML5) à un document HTML avec le pack d'agilité HTML? Je vous remercie

Réponse acceptée

L'analyseur HTML Agility Pack considère le doctype comme un nœud de commentaire. Pour ajouter un type de document à un document HTML, ajoutez simplement un noeud de commentaire avec le type de document souhaité au début du document:

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");

Veuillez noter que mon code ne vérifie pas l'existence d'un doctype.


Réponse populaire

Pour autant que je sache, AgilityPack n'a pas de méthode directe pour définir le doctype, mais comme Hans l'a mentionné, HAP considère le doctype comme un nœud de commentaire. Donc, vous pouvez essayer de trouver le doctype existant en premier, sinon en créer un nouveau et y coller une valeur souhaitée:

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

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



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