Aggiungi un doctype all'HTML tramite il pacchetto Agility HTML

.net c# html-agility-pack

Domanda

So che è facile aggiungere elementi e attributi ai documenti HTML con il pacchetto agilità HTML. Ma come posso aggiungere un doctype (ad esempio quello HTML5) ad un HtmlDocument con il pacchetto agility html? Grazie

Risposta accettata

Il parser Html Agility Pack tratta il doctype come nodo di commento. Per aggiungere un doctype a un documento HTML è sufficiente aggiungere un nodo di commento con il doctype desiderato all'inizio del documento:

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

Tieni presente che il mio codice non verifica la presenza di un doctype.


Risposta popolare

Per quanto ne so, AgilityPack non ha un metodo diretto per impostare il doctype, ma come menzionato da Hans, HAP considera il doctype come un nodo di commento. Quindi potresti prima provare a trovare il doctype esistente, se non crearne uno nuovo e incollare lì un valore desiderato:

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

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché