快速,轻量级的XML解析器

我有一个特定的格式XML文档,我将推动。 此文档将始终为相同类型,因此非常严格。

我需要解析这个,以便我可以将它转换为JSON(嗯,一个稍微混蛋的版本,所以其他人可以使用它与DOJO)。

我的问题是,我是否应该使用非常快速的轻量级(不需要SAX等)XML解析器(任何想法?)或编写我自己的,基本上转换为StringBuffer并旋转数组? 基本上,我假设所有HTML解析器都将通过字符串(或内存缓冲区)旋转并解析,从而产生输出。

谢谢

编辑

xml将介于3/4行到最大约50(极端)之间。

不,你不应该为此编写自己的XML解析器。

SAX本身非常轻巧,快速,所以我不确定为什么认为它太多了。 使用字符串缓冲区实际上使用SAX的可伸缩性要小得多,因为SAX不要求您将整个XML文件加载到内存中以使用它。 我已经使用SAX来解析多GB的XML文件,在32位计算机上使用字符串缓冲区是不可能的。

如果您有小文件并且不需要担心性能,请考虑使用DOM。 Java的实现可能有点烦人(使用DocumentBuilder创建文档,DocumentBuilder来自DocumentBuilderFactory)

从文件创建文档的代码如下所示:

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new FileInputStream("file.xml")); 

(请注意,如果需要解析多个文件,保留对文档构建器的引用会加快速度)

然后使用org.w3c.dom.Document中的函数来读取或操作内容。 例如, getElementsByTagName()返回具有特定标记名称的所有元素。

这实际上取决于您要解析的XML类型。 当有东西可以为你完成工作时,我不会编写你自己的解析器。

SAX / DOM的选择实际上是基于您要解析的内容,请参阅此内容以了解如何使用它:

http://geekexplains.blogspot.com/2009/04/sax-vs-dom-differences-between-dom-and.html

即使您不使用SAX / DOM,仍然可以使用简单的选项,看看简单:)

http://simple.sourceforge.net/

您可能还想考虑STaX。

也许你应该看看kXML 2,一个专为受限环境设计的小型XML pull解析器,用于访问,解析和显示支持Java 2 Micro Edition的设备的XML文件。 它也适用于Java SE / EE ;-)。 因为它是专为微型版本设计的,所以它非常轻巧(占地面积小),而且恕我直言也非常容易使用(比SAX / DOM等更容易)。

根据我自己对kXML 2的经验:我用它来解析大于1 GB的XML文件 – 维基百科转储,我对性能/内存消耗等感到非常满意。

最后;-) – 链接: http : //kxml.sourceforge.net/kxml2/

你可以使用Dom4j / xstream将xml读入等效的java模态,然后使用JSONLIB转换为JSON。

您真的需要解析/操作XML文档中的任何数据吗? 如果没有,您可以创建使用XSLT。 真的很简单,真的很快。

使用真正的XML解析器。 如果你不这样做,你可能会在事情发生变化时被咬伤。 该文档可能“非常严格”,但在两年后,某些东西可能会被重新考虑,它将改变结构,以便它使用XML解析器解析到相同的数据结构并打破自制字符串解析器。

在后端解析并暴露JSON可能是正确的方法,这样你就可以拥有可以轻松与其他来源集成的通用JSON数据,但如果你有一个简单的消息,这是你认为唯一的地方使用JSON,您可以尝试进行解析客户端。 Dojo有一个实验性的客户端XML解析器

你必须使用XML吗?

我发现我自己的自定义文本格式比使用任何现成软件包的XML或JSON快得多 – 它们很快,但是通过控制我自己的格式并且只是进行字符串解析我能够将时间缩短一半最快的XML实现。

显然,只有当你完全负责格式并且可能不适合你的情况时,这才有效,但对于这种情况下的任何其他人:不要认为XML是你拥有的绝对最快的选择。 不是。