2015-03-22 18 views
7

Ho un frammento di codice HTML <div><p>text1</p></div><div><p>text1</p></div>graziosi snippet HTML uscita

Voglio fare abbastanza come questo

<div> 
    <p>text1</p> 
</div> 
<div> 
    <p>text1</p> 
</div> 

Quale sarebbe modo più semplice per farlo? (Ho guardato su trasformazione e jsoup) ma non sono sicuro di cosa sarebbe davvero intelligente da usare. Grazie!

+2

- "HTML Tidy" ?! – MrWhite

+0

grazie, in qualche modo ho perso questo :) –

risposta

2

jTidy potrebbe andare bene per questo compito - http://jtidy.sourceforge.net/howto.html

public String prettyPrintHTML(String rawHTML) 
{  
    Tidy tidy = new Tidy(); 
    tidy.setXHTML(true); 
    tidy.setIndentContent(true); 
    tidy.setPrintBodyOnly(true); 
    tidy.setTidyMark(false); 

    // HTML to DOM 
    Document htmlDOM = tidy.parseDOM(new ByteArrayInputStream(rawHTML.getBytes()), null); 

    // Pretty Print 
    OutputStream out = new ByteArrayOutputStream(); 
    tidy.pprint(htmlDOM, out); 

    return out.toString(); 
} 
+0

È possibile evitare di aggiungere automaticamente testa e corpo al mio risultato? Devo analizzare solo lo snippet. –

+0

Ho impostato 'tidy.setPrintBodyOnly (true);' - dovrebbe farlo. Se è ancora avvolto, recupera semplicemente il contenuto del corpo del nodo da htmlDOM. 'Node body = htmlDom.getElementsByTagName (" body "). Item (0);' –

+0

Cosa devo fare se ho bisogno di avere [solo parte intestazione] ma non un corpo? –

2

Vorrei utilizzare HTML Tidy qui è un online version.

Molti degli editor di testo dispongono di plug-in o funzionalità incorporate per questo.

Sublime Text

BBEdit

Coda

+0

Come posso evitare di aggiungere body e html? Voglio avere solo il mio snippet. –

+0

Dipende quando stai provando a farlo. Vuoi farlo al volo in modo che il tuo codice venga inviato a una pagina formattata o stai cercando di farlo mentre lo stai modificando? – whoacowboy

+0

Ho bisogno di visualizzare snippet di html da cui la nostra pagina è combinata. Alcuni clienti desiderano vedere gli snippet separatamente anziché visualizzare HTML sulla pagina. –

12

È possibile utilizzare Jsoup come

String html = "<div><p>text1</p></div><div><p>text1</p></div>"; 
Document doc = Jsoup.parseBodyFragment(html); 

Ma questo sarà avvolgere il vostro testo in

<html> 
    <head></head> 
    <body> 
    .. 
    </body> 
</html> 

per sbarazzarsi di questa parte è possibile ottenere una parte da <body> come

System.out.println(doc.body().html()); 

che stampa

<div> 
<p>text1</p> 
</div> 
<div> 
<p>text1</p> 
</div> 

Se vuoi aumentare il rientro puoi impostarlo prima con

doc.outputSettings().indentAmount(4); 

ora risultato sarà simile

<div> 
    <p>text1</p> 
</div> 
<div> 
    <p>text1</p> 
</div> 
Problemi correlati