快速,轻量级的XML解析器

时间:2010-01-25 18:16:26

标签: java xml json dojo

我有一个特定的格式XML文档,我将被推送。该文档将始终使用相同的类型,因此非常严格。

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

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

由于

修改

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

8 个答案:

答案 0 :(得分:10)

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

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

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

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

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

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

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

答案 1 :(得分:7)

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

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

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

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

http://simple.sourceforge.net/

您可能还想考虑STaX。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

在后端进行解析并暴露JSON可能是正确的方法,以便您可以轻松地与其他来源集成通用JSON数据,但如果您有一个简单的消息,这是您认为唯一的地方您将使用JSON,您可以尝试进行解析客户端。 Dojo有一个experimental client-side XML parser

答案 7 :(得分:-1)

你必须使用XML吗?

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

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