Agrega un doctype a HTML a través de HTML Agility Pack

.net c# html-agility-pack

Pregunta

Sé que es fácil agregar elementos y atributos a documentos HTML con el paquete de agilidad de HTML. Pero, ¿cómo puedo agregar un doctype (por ejemplo, el de HTML5) a un HtmlDocument con el paquete de agilidad html? Gracias

Respuesta aceptada

El analizador de Html Agility Pack trata el doctype como un nodo de comentario. Para agregar un doctype a un documento HTML, simplemente agregue un nodo de comentario con el doctype deseado al principio 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");

Tenga en cuenta que mi código no comprueba la existencia de un doctype.


Respuesta popular

Por lo que sé, AgilityPack no tiene un método directo para establecer el doctype, pero como Hans mencionó, HAP trata al doctype como un nodo de comentarios. Así que podrías intentar encontrar primero el doctype existente, si no crear uno nuevo y pegar allí el valor deseado:

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

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


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow