2012-03-30 83 views
0

我正在使用HtmlUnit對Html頁面進行一些處理。我的問題是,它似乎沒有正確保持空白。HtmlUnit處理空白

原始的HTML看起來像:

WWW:

<div><cite>www.<b>example</b>.com</cite> 

其中作爲渲染。 示例 .com

在使用html單元對dom的其他部分進行一些解析之後,我使用getXml()打印出html。這樣做會導致要美化打印的HTML:

<div> 
    <cite> 
     www. 
     <b> 
     example 
     </b> 
     .com 
    </cite> 

這最終呈現爲:

WWW。 示例 .com

請注意示例之前和之後的額外空間。

我試着只是修剪從生成的漂亮打印的dom空白,但然後你失去了你真正想要他們的地方的空間。

單步執行生成的dom時,看起來HtmlUnit會在創建DomText節點時修剪所有DomText節點,因此空間信息將丟失。

有什麼辦法可以配置HtmlUnit來跟蹤這些信息嗎?或者更好地維護原始html的一些替代方法?我只需要能夠通過XPath獲得額外的HTML部分。

+0

是否漂亮的打印使用空格或製表符?如果選項卡,你不能替換輸出標記中的所有換行符和製表符,而只留下空格? – aroth 2012-03-30 00:22:32

+0

這是一個很好的想法。它看起來像空間根本沒有維護,但它們都根據縮進來對齊。 – 2012-03-30 18:56:33

回答

0

我想這應該返回原始的HTML:

WebClient webClient = new WebClient(); 
HtmlPage page = webClient.getPage("http://www.yourpage.com"); 
String originalHtml = page.getWebResponse().getContentAsString(); 
+0

感謝您的建議。不幸的是我需要一個改變版本的頁面,所以我需要從構建的頁面獲取它,而不是原始的Web響應。 – 2012-03-30 18:54:30

0

使用JavaScript變得沒有額外的空格的HTML:

WebClient client = new WebClient(BrowserVersion.FIREFOX_17); 
HtmlPage page = client.getPage(url); 
client.waitForBackgroundJavaScript(5000); 

String html = htmlPage.executeJavaScript("document.body.parentNode.outerHTML") 
    .getJavaScriptResult() 
    .toString();