HtmlAgilityPack: come creare HTML con rientro?

c# html-agility-pack html-generation

Domanda

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

Risposta accettata

Per quanto ne so, HtmlAgilityPack non può farlo. Ma si può guardare attraverso i pacchetti html ordinati che vengono proposti in domande simili:


Risposta popolare

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.




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é