2013-08-01 15 views
5

Il testo quasi HTML, assomiglia a: Simple<br> text <b>simple</b> text simple <BR><BR>text simple text, mi piacerebbe analizzarlo e creare dom document. Ma il problema è con tag non chiusi, quando provo questo:Come parsing quasi-html text in java?

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
InputSource source = new InputSource(new StringReader(
Document doc = builder.parse(source); 

errore si verifica: org.xml.sax.SAXParseException; The element type "br" must be terminated by the matching end-tag

Non voglio sostituire tutte <br> da <br></br>, qualsiasi soluzione o consiglio?

+4

Probabilmente non è possibile inserirlo in un DOM. Devi usare un parser HTML clemente come [jSoup] (http://jsoup.org/) - cercherà di risolvere il problema con l'HTML. Un po 'come farebbe un browser web. –

+0

Penso che si possa fare con HTMLEditorKit ... – linski

+0

@BoristheSpider non c'è bisogno di jSoup può essere fatto con Java standard, vedere la mia risposta. – linski

risposta

3

Utilizzare jsoup e usufruire della semplicità di utilizzo.

2

È necessario riscrivere tutto l'HTML ben formato. Fondamentalmente si passa attraverso il testo e si crea un elenco di tutti i tag di apertura. Quando trovi un tag di chiusura corrispondente, puoi rimuoverlo dall'elenco. Quando hai finito, e hai ancora voci in questo elenco, sai che non è ben formato.

Il problema è dove inserire i tag non chiusi. Puoi provare a inserire un tag di chiusura corrispondente, subito dopo la parola successiva. Nel tuo caso puoi semplicemente sostituire il tag br da br/tag, se questo è l'unico caso. In questo modo string rappresenta il contenuto del documento.

string = string.replace("<br>", "<br />");