2013-08-01 18 views
5

Quasi tekst HTML wygląda następująco: Simple<br> text <b>simple</b> text simple <BR><BR>text simple text, Chciałbym przetworzyć go i utworzyć dom document. Ale problem jest z niezamkniętych znaczników, gdy próbuję to:Jak analizować tekst quasi-html w java?

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

błąd: org.xml.sax.SAXParseException; The element type "br" must be terminated by the matching end-tag

Nie chcę wymieniać wszystkich <br> przez <br></br>, każdego rozwiązania lub porady?

+4

Prawdopodobnie nie można wprowadzić go do DOM. Musisz użyć łagodnego parsera HTML, na przykład [jSoup] (http://jsoup.org/) - spróbuje on naprawić kod HTML. Trochę jak przeglądarka internetowa. –

+0

Myślę, że można to zrobić za pomocą HTMLEditorKit ... – linski

+0

@BoristheSpider nie trzeba jSoup można zrobić ze standardowej Java, zobacz moją odpowiedź. – linski

Odpowiedz

3

Użyj jsoup i ciesz się łatwością użytkowania.

2

Musisz przepisać wszystkie dobrze utworzone HTML. Zasadniczo przejdziesz przez tekst i utworzysz listę wszystkich otwierających tagów. Po znalezieniu odpowiedniego znacznika zamykającego możesz go usunąć z listy. Kiedy skończysz i nadal masz wpisy na tej liście, wiesz, że nie jest dobrze uformowany.

Problem polega na tym, gdzie należy wstawić niezamknięte znaczniki. Możesz spróbować wstawić odpowiedni znacznik zamykający, zaraz po następnym słowie. W twoim przypadku możesz po prostu zastąpić tag br przez br/tag, jeśli jest to jedyne zdarzenie. W ten sposób ciąg represntes treść dokumentu.

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