Html Agility Pack: donnez au code une apparence soignée

html-agility-pack

Question

Puis-je utiliser Html Agility Pack pour donner à la sortie une belle apparence, sans espace blanc inutile?

Réponse acceptée

HAP ne vous donnera pas les résultats escomptés.

Essayez d’utiliser un wrapper .net pour HtmlTidy tel que celui trouvé ici.

using System;
using System.IO;
using System.Net;
using Mark.Tidy;

namespace CleanupHtml
{
    /// <summary>
    /// http://markbeaton.com/SoftwareInfo.aspx?ID=81a0ecd0-c41c-48da-8a39-f10c8aa3f931
    /// </summary>
    internal class Program
    {
        private static void Main(string[] args)
        {
            string html =
                new WebClient().DownloadString(
                    "http://stackoverflow.com/questions/2593147/html-agility-pack-make-code-look-neat/2610903#2610903");

            using (Document doc = new Document(html))
            {
                doc.ShowWarnings = false;
                doc.Quiet = true;
                doc.OutputXhtml = true;
                doc.OutputXml = true;
                doc.IndentBlockElements = AutoBool.Yes;
                doc.IndentAttributes = false;
                doc.IndentCdata = true;
                doc.AddVerticalSpace = false;
                doc.WrapAt = 120;

                doc.CleanAndRepair();

                string output = doc.Save();
                Console.WriteLine(output);
                File.WriteAllText("output.htm", output);
            }
        }
    }
}

Résultats:

using System;
using System.IO;
using System.Net;
using Mark.Tidy;

namespace CleanupHtml
{
    /// <summary>
    /// http://markbeaton.com/SoftwareInfo.aspx?ID=81a0ecd0-c41c-48da-8a39-f10c8aa3f931
    /// </summary>
    internal class Program
    {
        private static void Main(string[] args)
        {
            string html =
                new WebClient().DownloadString(
                    "http://stackoverflow.com/questions/2593147/html-agility-pack-make-code-look-neat/2610903#2610903");

            using (Document doc = new Document(html))
            {
                doc.ShowWarnings = false;
                doc.Quiet = true;
                doc.OutputXhtml = true;
                doc.OutputXml = true;
                doc.IndentBlockElements = AutoBool.Yes;
                doc.IndentAttributes = false;
                doc.IndentCdata = true;
                doc.AddVerticalSpace = false;
                doc.WrapAt = 120;

                doc.CleanAndRepair();

                string output = doc.Save();
                Console.WriteLine(output);
                File.WriteAllText("output.htm", output);
            }
        }
    }
}

Réponse populaire

Voir une question similaire ici: HtmlAgilityPack: comment créer du HTML indenté? et ma réponse:

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 minimiser le rendu du code HTML, et non 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.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi