目前在Java中几种常用的XML解析器的比较

如题所述

目前常用的XML的解析器主要有:SAX,DOM,Xerces

1、SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX è¿˜æ¯”它的替代者 DOM å¿«è®¸å¤šã€‚另一方面,由于应用程序没有以任何方式存储数据,使用 SAX æ¥æ›´æ”¹æ•°æ®æˆ–在数据流中往后移是不可能的。

2、DOM ä»¥åŠå¹¿ä¹‰çš„基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX é‚£æ ·æ˜¯ä¸€æ¬¡æ€§çš„处理。DOM ä½¿ç”¨èµ·æ¥ä¹Ÿè¦ç®€å•å¾—多。另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM æ ‘可能是一个缓慢的过程。

3、选择 DOM è¿˜æ˜¯é€‰æ‹© SAX,这取决于下面几个因素: 
      åº”用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM æ˜¯é€‚当的选择。并不是说使用 SAX å°±ä¸èƒ½æ›´æ”¹æ•°æ®ï¼Œä½†æ˜¯è¯¥è¿‡ç¨‹è¦å¤æ‚得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。 
      æ•°æ®å®¹é‡ï¼š å¯¹äºŽå¤§åž‹æ–‡ä»¶ï¼ŒSAX æ˜¯æ›´å¥½çš„选择。数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX æ¥å°†è¯¥éƒ¨åˆ†æ•°æ®æå–到应用程序中可能更好。 å¦ä¸€æ–¹é¢ï¼Œå¦‚果您知道自己以后会回头引用已处理过的大量信息,那么 SAX ä¹Ÿè®¸ä¸æ˜¯æ°å½“的选择。 
      å¯¹é€Ÿåº¦çš„需要:SAX å®žçŽ°é€šå¸¸è¦æ¯” DOM å®žçŽ°æ›´å¿«ã€‚ 
      SAX å’Œ DOM ä¸æ˜¯ç›¸äº’排斥的,记住这点很重要。您可以使用 DOM æ¥åˆ›å»º SAX äº‹ä»¶æµï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ SAX æ¥åˆ›å»º DOM æ ‘。事实上,用于创建 DOM æ ‘的大多数解析器实际上都使用 SAX æ¥å®Œæˆè¿™ä¸ªä»»åŠ¡ï¼

4、SAX,DOM是两种对XML文档进行分析的方法(没有具体的实现,只有接口),所以不是解释器,如果光有他们,你是完成不了对xml文档的处理的。SAX的包是org.xml.sax,DOM的包是org.w3c.dom,包的名称很重要,它有助于你理解他们之间的关系。

5、jaxp是api,他封装了sax/dom两种接口。并在sax/dom的基础之上,作了一套比较简单的api以供开发人员使用。jaxp的包是javax.xml.parsers,可以看看jaxp的源文件,它的文件中包含了对sax或者dom的引用(import)jaxp也不是具体的实现,他只是一套api。如果你仅仅有jaxp那是无法工作的,(其实jaxp只是完成对sax、dom的包装,生成了DocumentBuilderFactory/DocumentBuilder和SAXParserFactory SAXParser。也就是设计模式中的工厂模式,他的好处就是具体的对象( è§£é‡Šå™¨ï¼‰å»ºç«‹ç”±å­ç±»å®Œæˆï¼‰

6、xerces解释器(号称地球上最快的xml解释器)在xerces中对jaxp中定义的SAXParser SAXParserFactory DocumentBuilder DocumentBuilderFactory进行了继承(extends)对应SAXParserImpl XParserFactoryImpl DocumentBuilderImpl DocumentBuilderFactoryImpl这就是为什么你的classpath中只要有xerces.jar(其中包含了sax dom jaxp ï¼‰å’Œ xercesImpl.jar就可以的原因了.
温馨提示:答案为网友推荐,仅供参考