Html Agility Pack:使代碼看起來整潔

html-agility-pack

我可以使用Html Agility Pack使輸出看起來很好地縮進,不必要的空白區域被剝離了嗎?

一般承認的答案

HAP不會給你你想要的結果。

嘗試使用HtmlTidy的.net包裝器,例如此處找到的包裝器

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

結果:

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

熱門答案

在這裡看到一個類似的問題: HtmlAgilityPack:如何創建縮進的HTML?和我的回答:

不,這是“按設計”選擇。 XML(或XHTML,XML,而不是HTML)之間存在很大差異 - 大多數時候 - 空白沒有特定含義,而HTML。

這不是一個很小的改進,因為更改空格可以改變某些瀏覽器呈現給定HTML塊的方式,尤其是格式錯誤的HTML(通常由庫處理得很好)。 Html Agility Pack旨在最大限度地減少HTML的呈現方式,而不是標記的編寫方式。

我不是說這不可行或根本不可能。顯然你可以轉換為XML和voilÃ(你可以編寫一個擴展方法來使這更容易)但是在一般情況下渲染的輸出可能會有所不同。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因