HtmlAgilityPack: ¿cómo crear HTML con sangría?

c# html-agility-pack html-generation

Pregunta

Por lo tanto, estoy generando html usando HtmlAgilityPack y está funcionando perfectamente, pero el texto html no está sangrado. Puedo obtener XML sangrado sin embargo, pero necesito HTML. ¿Hay alguna manera?

HtmlDocument doc = new HtmlDocument();

// gen html
HtmlNode table = doc.CreateElement("table");
table.Attributes.Add("class", "tableClass");
HtmlNode tr = doc.CreateElement("tr");
table.ChildNodes.Append(tr);
HtmlNode td = doc.CreateElement("td");
td.InnerHtml = "—";
tr.ChildNodes.Append(td);

// write text, no indent :(
using(StreamWriter sw = new StreamWriter("table.html"))
{
        table.WriteTo(sw);
}

// write xml, nicely indented but it's XML!
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Indent = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlWriter xw = XmlTextWriter.Create("table.xml", settings))
{
        table.WriteTo(xw);
}

Respuesta aceptada

Por lo que sé, HtmlAgilityPack no puede hacer esto. Pero puedes mirar a través de paquetes de html tidy que se proponen en preguntas similares:


Respuesta popular

No, y es una opción "por diseño". Hay una gran diferencia entre XML (o XHTML, que es XML, no HTML) donde, la mayoría de las veces, los espacios en blanco no tienen un significado específico, y HTML.

Esta no es una mejora tan pequeña, ya que los espacios en blanco cambiantes pueden cambiar la forma en que algunos navegadores representan un fragmento HTML dado, especialmente HTML malformado (que en general está bien manejado por la biblioteca). Y el Html Agility Pack fue diseñado para mantener la forma en que se representa el HTML, no para minimizar la forma en que se escribe el marcado.

No estoy diciendo que no sea factible o simplemente imposible. Obviamente, puede convertir a XML y voilà (y podría escribir un método de extensión para hacerlo más fácil), pero la salida renderizada puede ser diferente, en el caso general.



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