2012-03-30 1 views
0

Я использую HtmlUnit для обработки некоторых страниц Html. Моя проблема заключается в том, что, похоже, это не правильно поддерживает пробелы.HtmlUnit обработка whitespace

оригинальный HTML выглядит следующим образом:

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

Что делает, как:

WWW. пример .com

После использования блока html для выполнения синтаксического разбора на других частях dom, я распечатываю html с помощью getXml(). Это приводит к тому, HTML, чтобы быть довольно напечатал:

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

Это заканчивает рендеринга, как:

WWW. пример .com

Обратите внимание на дополнительное пространство до и после примера.

Я пробовал просто обрезать пробелы из получающегося довольно напечатанного dom, но тогда вы теряете места в тех местах, где вы действительно хотите их.

Пройдя через сгенерированное dom, кажется, что HtmlUnit обрезает все узлы DomText, когда он их создает, поэтому информация о пространстве теряется.

Можно ли настроить HtmlUnit для отслеживания этой информации? Или какая-то альтернатива, которая лучше поддерживает оригинальный html? Мне просто нужно иметь возможность добавлять дополнительные части html через XPath.

+0

Используются ли пробелы довольно-печати или вкладки? Если вкладки, вы не могли бы заменить все новые строки и вкладки в разметке вывода, оставив только пробелы? – aroth

+0

Это хорошая мысль. Похоже, что пробелы не поддерживаются, но все они выравниваются в соответствии с отступами. –

ответ

0

Я думаю, что это должен вернуть исходный HTML:

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

Спасибо за предложение. К сожалению, мне нужна измененная версия страницы, поэтому мне нужно получить ее с построенной страницы, а не с исходного веб-ответа. –

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();