Html Agility Pack: hacer que el código se vea limpio

html-agility-pack

Pregunta

¿Puedo usar Html Agility Pack para hacer que la salida se vea bien sangrada, se eliminen los espacios en blanco innecesarios?

Respuesta aceptada

HAP no te va a dar los resultados que buscas.

Intente usar un envoltorio .net para HtmlTidy como el que se encuentra aquí

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

Resultados:

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

Respuesta popular

Vea una pregunta similar aquí: HtmlAgilityPack: ¿cómo crear HTML con sangría? y mi respuesta:

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 minimizar la forma en que se representa el HTML, no 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.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué