Quindi sto generando html usando HtmlAgilityPack e funziona perfettamente, ma il testo html non è rientrato. Tuttavia, posso ottenere XML con rientri, ma ho bisogno di HTML. C'è un modo?
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);
}
Per quanto ne so, HtmlAgilityPack non può farlo. Ma si può guardare attraverso i pacchetti html ordinati che vengono proposti in domande simili:
No, è una scelta "di design". C'è una grande differenza tra XML (o XHTML, che è XML, non HTML) dove - il più delle volte - gli spazi bianchi non hanno un significato specifico e HTML.
Questo non è un miglioramento minore, poiché cambiare gli spazi vuoti può cambiare il modo in cui alcuni browser eseguono il rendering di un determinato chunk HTML, in particolare HTML malformato (che in generale è ben gestito dalla libreria). E l'Html Agility Pack è stato progettato per mantenere il modo in cui viene eseguito il rendering dell'HTML, non per minimizzare il modo in cui viene scritto il markup.
Non sto dicendo che non è fattibile o semplicemente impossibile. Ovviamente puoi convertire in XML e voilà (e potresti scrivere un metodo di estensione per renderlo più semplice) ma l'output renderizzato potrebbe essere diverso, nel caso generale.