2013-08-23 102 views
3

我需要解析一個xml塊,我得到的沒有根元素,名稱空間的缺省和實體聲明,儘管包括了所有這三個。
到目前爲止,我一直在使用Dom4j並對內容進行了一些包裝,但新內容和名稱空間不斷出現,並且內容的DTD/Schema無法訪問。容錯java xml解析器

鑑於我不控制我得到XML的來源, 是否有任何種類的java XML parser,將容忍這些錯誤?

  1. Abscence根元素的

  2. 未綁定的命名空間

  3. 未聲明的實體

+2

妥善解決您的問題將是接觸源,並要求他們遵守達標。無論他們給你什麼,都不是XML。如果TagSoup失敗,您可以編寫自己的解析器。檢查[ANTLR4](http://www.antlr.org/wiki/display/ANTLR4/Home)解析器生成器。它是[參考書](http://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference)具有XML解析示例。 – predi

+0

XML不需要名稱空間聲明。 – Raedwald

+0

但我操作的xml數據使用命名空間 – Chedy2149

回答

2

您可以嘗試使用TagSoup這是 「寬容」 的標記許多錯誤。

要解決缺少根元素的問題,您可以隨時在您需要解析的XML塊周圍添加自己的根元素。

+0

Stills命名空間綁定和實體聲明問題。 – Chedy2149

+1

TagSoup將簡單地禁止所有的命名空間。它也支持2000多個實體。 –

+0

TagSoup看起來很有趣,但如何使用它?任何教程?而且它是否具有查詢能力(xPath)? – Chedy2149

0

我認爲所有主要的Java XML解析器都有這些嚴格的要求,例如根元素。 解決所有這些問題的簡單方法是編寫自己的Java XML解析器。如果您純粹將XML用作配置文件,那麼我建議您查看一下使用Java屬性。

感謝, 里斯

+0

謝謝,但xml用於存儲應用程序數據。 – Chedy2149

+0

好的,在這種情況下,請嘗試製作自己的XML解析器(如果希望快速完成,.split()方法是您的朋友),或者更改爲可以存儲應用程序文件和數據比XML更快的數據庫。 –

+0

它們必須嚴格*成爲XML解析器*。如果文本不符合XML的定義,它就是*不是XML *。 – Raedwald