2013-08-01 13 views
5

準html文本,看起來像: Simple<br> text <b>simple</b> text simple <BR><BR>text simple text,我想解析它並創建dom document。但問題是未關閉標籤,當我試試這個:發生如何解析java中的準html文本?

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

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

我不想更換所有<br>通過<br></br>,任何解決方案或建議嗎?

+4

您可能無法將其放入DOM中。您需要使用寬鬆的HTML解析器,如[jSoup](http://jsoup.org/) - 它會嘗試修復HTML。有點像網絡瀏覽器會。 –

+0

我認爲這可以用HTMLEditorKit來完成...... – linski

+0

@BoristheSpider不需要jSoup它可以用標準的Java來完成,請參閱我的答案。 – linski

回答

3

使用jsoup並享受易用性。

2

您必須重寫所有格式正確的HTML。基本上你會瀏覽文本並創建一個所有開始標籤的列表。當您找到相應的結束標記時,可以從列表中刪除它。當你通過時,你仍然有這個列表中的條目,你知道它沒有形成。

問題是在哪裏插入未關閉的標籤。您可以嘗試在下一個單詞之後插入相應的結束標記。在你的情況下,你可以簡單地用br/tag替換br標籤,如果這是唯一的發生。這種方式字符串represntes文件的內容。

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