Html Agility Pack: rende il codice ordinato

html-agility-pack

Domanda

Posso usare Html Agility Pack per rendere l'output molto gradevole, senza spazio bianco inutile?

Risposta accettata

HAP non ti darà i risultati che cerchi.

Prova ad usare un .net wrapper per HtmlTidy come quello trovato qui

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

risultati:

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

Risposta popolare

Vedi una domanda simile qui: HtmlAgilityPack: come creare HTML con rientro? e la mia risposta:

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 minimizzare il modo in cui viene eseguito il rendering dell'HTML, non 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é