2010-10-23 49 views
6

我只是尋找一個非常簡單的方法來清理一些HTML(可能與嵌入的JavaScript代碼)。我試過twodifferentHTML Tidy .NET端口和兩個都拋出異常...C#版本的HTML Tidy?

對不起,「乾淨」我的意思是「縮進」。 HTML的格式不正常。這是嚴格的XHTML


終於得到的東西與SGML的工作,但是這是嚴重的代碼最可笑的大塊以往任何時候都縮進一些HTML。

private static string FormatHtml(string input) 
{ 
    var sgml = new SgmlReader {DocType = "HTML", InputStream = new StringReader(input)}; 
    using (var sw = new StringWriter()) 
    using (var xw = new XmlTextWriter(sw) { Indentation = 2, Formatting = Formatting.Indented }) 
    { 
     sgml.Read(); 
     while (!sgml.EOF) 
      xw.WriteNode(sgml, true); 
    } 
    return sw.ToString(); 
} 
+0

所以你只是想重新格式化你的源代碼?你可以使用任何web-ide或Notepad ++。 – 2010-10-23 03:59:10

+0

@Nick:我意識到這一點,但我*不*嘗試重新格式化HTML文件我已經有..我想重新格式化HTML,我在C#應用程序中生成... – mpen 2010-10-23 04:14:20

+0

檢查HtmlTextWriter,我更新了我的回答 – 2010-10-23 04:28:29

回答

8

HTML Tidy的最新C#包裝由Mark Beaton完成,它看起來比您引用的鏈接(2003)的鏈接更新。另外值得注意的是,Mark還提供了用於引用的可執行文件,而不是將其從官方網站中提取出來。這應該做的很好的組織和驗證你的HTML的伎倆。

+2

構建僅適用於tidylib,而不是C#封裝。您還需要從源代碼構建TidyManaged。我正在運行一個64位機器,但只有32位tidylib DLL可以工作,無論出於何種原因。我必須把它放在c:/ windows/system中。另外,Beaton提供的示例不會縮進你的HTML - 我唯一想要的東西 - 你需要添加'doc.IndentBlockElements = AutoBool.Auto' ...有點棘手的想法。 – mpen 2011-01-11 20:09:02

+0

同意,移動到x64後,我來到相當不卡住和tidylib引發異常「BadImageFormatException發生 - 試圖加載程序格式不正確(從HRESULT異常:0x8007000B)」。在TidyManaged https:// github上發佈了一個bug。com/markbeaton/TidyManaged/issues/3 – wonea 2011-03-22 09:57:58

+0

我已經設法通過將配置管理器中的項目更改爲x86中的TidyManaged項目和我的項目來引用它並使用32位版本的libtidy.dll。 – ChrisR 2011-04-18 18:29:41

3

UPDATE

檢查HtmlTextWriterXhtmlTextWriter,用法:Formatting Html Output with HtmlTextWriter,也許HTML construction via HtmlTextWriter會更好?

同時檢查:LINQ & Lambda, Part 3: Html Agility Pack to LINQ to XML Converter

http://www.manoli.net/csharpformat/,這裏source code你錯過情況。


也許你想自己做?此項目可幫助您:Html Agility Pack

什麼是Html Agility Pack(HAP)?

這是一個敏捷的HTML解析器,它構建了一個讀/寫DOM並支持普通的XPATH或XSLT(實際上,您不需要理解XPATH或XSLT就可以使用它,不用擔心)。它是一個.NET代碼庫,允許您解析「離開網頁」的HTML文件。解析器對「真實世界」格式錯誤的HTML非常寬容。對象模型與提出System.Xml非常相似,但是對於HTML文檔(或流)。

Html Agility Pack現在支持Linq to Objects(通過LINQ to Xml Like界面)。檢查出新的測試版使用此功能發揮

示例應用程序:

  • 頁固定或產生。你可以按照你想要的方式修改一個頁面,修改 DOM,添加節點,複製節點, 以及...你的名字。

  • 網頁掃描儀。 您可以使用一堆XPATH查詢輕鬆獲取img/src或 a/hrefs。

  • 刮刀。例如,您可以輕鬆地將任何現有網頁的 剪貼到RSS 供稿中,僅使用XSLT 文件作爲綁定。提供了一個 的例子。


你也可以試試這個實施:A managed wrapper for the HTML Tidy library

+0

我聽說過並且在過去曾經使用過HtmlAgilityPack ..但它可以整理HTML嗎? – mpen 2010-10-23 03:43:47

+0

HAP不是Tidy的替代品,而是可以爲您構建DOM,並且可以相應地處理它。另外我不知道它是否足夠聰明來解析格式不正確的HTML(如果你必須處理奇怪的東西)。順便說一句,你能更好地定義一下你的意思是「乾淨」,哪些規則必須應用?你也可以使用原始的HTML Tidy(http://bit.ly/aahXs8)而不依賴於包裝器,如果你只是需要定期清理一些文件。 – 2010-10-23 03:51:03

+1

我不需要處理DOM,我只想縮進它。我特別想要一個C#版本,因爲我需要在我的C#項目中使用它。我將一些HTML生成爲一個字符串,我想獲取該字符串,將其縮進並輸出另一個字符串。沒有更多,不少。認爲這很容易找到一個圖書館來做到這一點。 – mpen 2010-10-23 03:56:25

1

我用SGML Reader將HTML轉換成XHTML過去。可能值得研究...

我從來沒有任何問題,當我使用它。

+1

我確實研究過它。我無法弄清楚如何獲得一個字符串... – mpen 2010-10-23 04:05:46

+2

看看這個鏈接:http://www.eggheadcafe.com/articles/20030317.asp – 2010-10-23 04:09:16

+0

格式化一些HTML有點荒謬,但它確實工作。謝謝:) – mpen 2010-10-23 05:40:21