容错java xml解析器

问题描述:

我需要解析一个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

您可以尝试使用TagSoup这是 “宽容” 的标记许多错误。

要解决缺少根元素的问题,您可以随时在您需要解析的XML块周围添加自己的根元素。

+0

Stills命名空间绑定和实体声明问题。 – Chedy2149

+1

TagSoup将简单地禁止所有的命名空间。它也支持2000多个实体。 –

+0

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

我认为所有主要的Java XML解析器都有这些严格的要求,例如根元素。 解决所有这些问题的简单方法是编写自己的Java XML解析器。如果您纯粹将XML用作配置文件,那么我建议您查看一下使用Java属性。

感谢, 里斯

+0

谢谢,但xml用于存储应用程序数据。 – Chedy2149

+0

好的,在这种情况下,请尝试制作自己的XML解析器(如果希望快速完成,.split()方法是您的朋友),或者更改为可以存储应用程序文件和数据比XML更快的数据库。 –

+0

它们必须严格*成为XML解析器*。如果文本不符合XML的定义,它就是*不是XML *。 – Raedwald