2012-03-30 91 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();