dojo 快速、轻量级XML解析器[已关闭]

p1iqtdky  于 2022-12-16  发布在  Dojo
关注(0)|答案(8)|浏览(158)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

九年前就关门了。
Improve this question
我有一个特定格式的XML文档,我将得到推。这个文档将永远是相同的类型,所以它是非常严格的。
我需要解析它,以便可以将其转换为JSON(嗯,稍微有些粗糙的版本,以便其他人可以在DOJO中使用它)。
我的问题是,我应该使用一个非常快速的轻量级(不需要SAX等)XML解析器(有什么想法吗?)还是编写自己的解析器,基本上转换成StringBuffer并遍历数组?基本上,在封面之下,我假设所有HTML解析器都将遍历字符串(或内存缓冲区)并进行解析,在遍历过程中产生输出。
谢谢

编辑

XML将在3/4行到大约50行之间(最大值)。

a7qyws3x

a7qyws3x1#

不,您不应该尝试为此编写自己的XML解析器。
SAX本身是非常轻量级和快速的,所以我不知道为什么认为它太多了。另外,使用字符串缓冲区实际上比使用SAX伸缩性差得多,因为SAX不要求您将整个XML文件加载到内存中来使用它。我使用SAX解析了数GB的XML文件,这在32位机器上使用字符串缓冲区是无法做到的。
如果您有小文件,并且不需要担心性能,那么可以考虑使用DOM。Java的实现使用起来可能有点烦人(您使用DocumentBuilder创建文档,它来自DocumentBuilderFactory)
从文件创建文档的代码如下所示:

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

(note如果您需要解析多个文件,则保留对文档生成器的引用将加快速度)
然后使用org.w3c.dom.Document中的函数读取或操作内容,例如getElementsByTagName()返回所有具有特定标记名的元素。

raogr8fs

raogr8fs2#

这实际上取决于您解析的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。

4szc88ey

4szc88ey3#

也许您应该看看kXML 2,它是一个专门为受限环境设计的小型XML拉式解析器,用于在支持Java 2 Micro Edition的设备上访问、解析和显示XML文件。- ).因为它是为微型版设计的,所以它非常轻便(占用空间小),而且IMHO非常容易使用(比SAX/DOM等东西容易得多)。
根据我自己使用kXML 2的经验:我用它来解析大于1GB的XML文件-维基百科转储,我对性能/内存消耗等非常满意。
最后;-)-链接:http://kxml.sourceforge.net/kxml2/

h9vpoimq

h9vpoimq4#

您可以使用Dom 4j/xstream将xml读入等效的java模式,然后使用JSONLIB转换为JSON。

puruo6ea

puruo6ea5#

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

blpfk2vs

blpfk2vs6#

使用一个真实的的XML解析器。如果你不这样做,你可能会被咬当一些变化。文档可能是“非常严格”,但在两年的时间,一些可能会得到重构,它会改变结构,以便它解析到相同的数据结构与XML解析器和打破自制字符串解析器。

yyhrrdl8

yyhrrdl87#

在后端解析并公开JSON可能是正确的方法,这样您就可以获得通用的JSON数据,可以轻松地与其他源集成,但是如果您有一个简单的消息,并且这是您认为可以使用JSON的唯一地方,则可以尝试在客户端进行解析。

aij0ehis

aij0ehis8#

必须使用XML吗?
我发现我自己的自定义文本格式比任何现成的包中的XML或JSON都要快得多-它们速度很快,但通过控制我自己的格式并只进行字符串解析,我能够将时间缩短一半,而不是最快的XML实现。
显然,这只有在你完全负责格式的情况下才有效,而且可能不适合你的情况,但对于其他人来说:我不认为XML绝对是最快的选择。它不是。

相关问题