HtmlAgilityPack: comment créer du HTML en retrait?

c# html-agility-pack html-generation

Question

Donc, je génère du HTML en utilisant HtmlAgilityPack et cela fonctionne parfaitement, mais le texte HTML n'est pas en retrait. Je peux cependant obtenir du XML indenté, mais j'ai besoin de HTML. Y a-t-il un moyen?

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

Réponse acceptée

Autant que je sache, HtmlAgilityPack ne peut pas faire cela. Mais vous pouvez regarder à travers html Tidy Packs qui sont proposés dans des questions similaires:


Réponse populaire

Non, et c'est un choix "à dessein". Il y a une grande différence entre XML (ou XHTML, qui est XML, pas HTML) où - la plupart du temps - les espaces ne sont pas une signification spécifique, et HTML.

Ce n'est pas une amélioration si mineure, car la modification des espaces peut modifier la façon dont certains navigateurs affichent le chunk HTML donné, en particulier le HTML mal formé (généralement bien géré par la bibliothèque). Et le pack d'agilité HTML a été conçu pour conserver la façon dont le code HTML est rendu , non pour minimiser la façon dont le balisage est écrit .

Je ne dis pas que ce n'est pas faisable ou tout simplement impossible. Évidemment, vous pouvez convertir en XML et voilà (et vous pouvez écrire une méthode d’extension pour faciliter cela), mais la sortie rendue peut être différente, dans le cas général.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow