2012-03-30 3 views
0

Ich verwende HtmlUnit, um einige Verarbeitung einer HTML-Seite zu tun. Mein Problem ist, dass es scheint, whitespace nicht richtig zu behalten.HtmlUnit Verarbeitung Leerzeichen

Die ursprüngliche html wie folgt aussieht:

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

die als rendert:

www. Beispiel. Com

Nach der Verwendung von HTML-Einheit, um einige Parsing auf andere Teile des Doms zu tun, drucke ich die HTML-Ausgabe mit getXml(). Dadurch verursacht so die html ziemlich gedruckt werden:

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

Dieser endet Rendering als:

www. Beispiel .com

Beachten Sie den zusätzlichen Platz vor und nach Beispiel.

Ich habe versucht, nur die Leerzeichen aus der resultierenden hübsch gedruckten Dom, aber dann verlieren Sie Leerzeichen an Orten, wo Sie sie eigentlich wollen.

Beim Durchlaufen des generierten Doms scheint HtmlUnit alle DomText-Knoten beim Erstellen zu beschneiden, sodass die Rauminformationen verloren gehen.

Gibt es eine Möglichkeit, HtmlUnit zu konfigurieren, diese Informationen zu verfolgen? Oder eine Alternative, die das ursprüngliche HTML besser erhält? Ich muss nur zusätzliche Teile des HTML über XPath in der Lage sein.

+0

die Verwendung ziemlich Druck Leerzeichen oder Tabs funktioniert? Wenn Sie Tabulatoren verwenden, können Sie nicht alle Zeilenumbrüche und Tabulatoren im Ausgabe-Markup ersetzen, während Sie Leerzeichen allein lassen? – aroth

+0

Das ist ein guter Gedanke. Es sieht so aus, als ob die Räume überhaupt nicht gepflegt werden, alles ist nur nach den Einkerbungen ausgerichtet. –

Antwort

0

Ich denke, das die ursprüngliche html zurückkehren sollte:

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

Danke für den Vorschlag. Leider brauche ich eine geänderte Version der Seite, also muss ich sie von der erstellten Seite bekommen, nicht von der ursprünglichen Webantwort. –

0

Mit JavaScript, um die html ohne zusätzliche Leerzeichen bekommt:

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