2012-03-30 7 views
0

HtmlUnitを使用して、Htmlページの処理を行っています。私の問題は、空白を正しく維持しているようには見えないということです。HtmlUnit処理空白

元のHTMLは次のようになります。

としてレンダリング
<div><cite>www.<b>example</b>.com</cite> 

WWW。 .com

domの他の部分を解析するためにhtml単位を使用した後、getXml()を使用してhtmlを出力します。こうすることで、HTMLがきれいに印刷されます:

WWW:

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

これはとしてレンダリング終わります。 .com

例の前後に余分なスペースがあることに注意してください。

私は、結果としてきれいに印刷されたdomから空白を切り取ってみましたが、あなたが実際にそれらを必要とする場所でスペースを失いました。

生成されたdomを実行すると、HtmlUnitは、作成時にすべてのDomTextノードをトリミングするように見えるため、スペース情報は失われます。

この情報を追跡するためにHtmlUnitを構成する方法はありますか?または元のhtmlをよりよく維持する代替手段ですか?私はちょうどXPathを介してhtmlの余分な部分にできるようにする必要があります。私は、これは元のHTMLを返すべきだと思います

+0

がpretty-印刷用スペースやタブをしていますか?タブの場合は、出力マークアップ内のすべての改行とタブを置き換えることはできませんでしたが、スペースだけを残していましたか? – aroth

+0

それは良い考えです。スペースはまったく維持されていないように見えますが、そのすべてがインデントに従って整列しています。 –

答えて

0

:JavaScriptを使用して

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

提案していただきありがとうございます。残念ながら私はページの変更されたバージョンが必要なので、元のWebレスポンスではなく、構築されたページから取得する必要があります。 –

0

は、余分な空白なしで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();