2011-07-29 22 views
3

我們使用apaches velocity通用模板引擎生成HTML文件。生成的HTML是一種醜陋的,並沒有correcht縮進。Java中的漂亮打印(「僅用於縮進」)HTML文檔(無JTidy)

在我的情況下,我已經將HTML存儲在一個字符串中,我想以這種方式處理它,它看起來很漂亮。

我已經給了JTidy一個嘗試,但它改變了HTML源代碼,當我通過它管道原始HTML。有時會添加或刪除HTML標籤。

我的問題:

是否有一個Java庫還是其他什麼東西在那裏它(僅!)漂亮的打印無添加,刪除從我的HTML文檔的標籤我的HTML代碼?它只能做縮進,所以它看起來很漂亮!沒有更多,沒有更多。有任何想法嗎? :-)

歡迎提供代碼建議,提示或提示。你爲什麼不寫一個簡單的Java解析器漂亮打印

問候

+0

@ see http:// stackoverflow。com/questions/996646/stand-alone-java-code-formatter-beautifier-pretty-printer – chepseskaf

+0

* hm *在這個網站上,他們正在撰寫關於java源代碼的獨立源代碼格式器。我正在尋找一個java的libray,將做HTML漂亮的打印,所以我有我的字符串變量相當印刷的HTML ;-) – Martin

+0

似乎沒有其他替代JTidy ...你玩過配置? – chepseskaf

回答

0

HTML自己。這裏是一個草圖:

  1. 跟蹤打開和關閉標籤,例如和
  2. 有一個計數器來找出當前的縮進水平。
  3. 也許使用堆棧推,彈出縮進級別
  4. 只是想迭代直通HTML字符串,推動當前的縮進水平堆棧,當你看到一個標籤
  5. 如果你看到那麼一個嵌套的標籤增加縮進水平,繼續前進
  6. 當你看到標籤的結尾,例如。等彈出堆棧回到prev縮進水平

我想在這裏給你一個粗略的想法,你可以用這個作爲起點。我寫了很多perl漂亮的打印機。您可以使用Perl來快速編寫解析腳本。

1

在java中查找任何SAX解析器示例。用於打開標籤的indent ++,用於關閉的intent,以及用已計數的意圖書寫內容。

+0

SAX解析器的麻煩在於,要製作其他完全相同的副本非常困難源文件。您需要重構元素和屬性 - 字符不會簡單地回顯到輸出流。 –

2

也許有點晚,但我找到了與Jsoup的解決方案。

您可以僅使用解析器得到HTML的「漂亮」的版本,以及(在需要的情況下),避免html元素的產生通過使用「自定義分析器」

我得到了答案從這個Jsoup question

而且其

public static String formatHTML(String html) throws Exception{ Document doc = Jsoup.parse(html, "", Parser.xmlParser()); return doc.toString(); }

我希望這有助於。

Regards