关于JAXP, JAXB, SAX, StAX, DOM等名词解释
DOM(Document Object Model):SAX和DOM最先出来的两种解析器。是一种tree-based API。DOM的特点是,把整个XML内容读取内存中进行处理。
优点:可以随机进行对某个节点内容进行读取和写入。缺点:耗费内存,性能差。
如果要对XML内容进行很多随机的读取其中的内容,或进行更改,还是建议使用DOM解析器。
SAX(Simple API for XML):和DOM不同,SAX不是一次把所有XML内容读取进来,而是进行一行一行的读取。每读取一行,就处发事件,处理这行的内容。
优点:处理速度快,节省内存。缺点:不能再次读取已经读过的内容,而且只能进行读,不能进行写。
适用于只扫描一次XML内容,就能提取想要的数据的场合。
StAX(Streaming API for XML):StAX解析器是最后出来的解析器,被认为比前两种都好。
它和SAX非常像,也是event-based API,不同的一点是:
StAX是Pull类型,而SAX是Push类型,这两种类型有什么不同,稍后的文章介绍。
(StAX有两种API,一种是cursor-based,一种是iterator-based)
StAX相对SAX来说,更易于使用,编程上更方便一点。
SAX只能对XML内容进行读,不能写;而StAX既可进行读,也可以进行写。
优点:处理速度快,节省内存,可进行读写。缺点:不能再次读取已经读过的内容。
适用于只扫描一次XML内容,就能提取想要的数据的场合。
JAXB: JAXB是Java Architecture for XML Binding的缩写。可以将一个Java对象转变成为XML格式,反之亦然。
我们把对象与关系数据库之间的映射称为ORM,其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。
原来JAXB是Java EE的一部分,在JDK1.6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。
JDK1.6中自带的这个JAXB版本是2.0,比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,
这就极大简化了开发的工作量。
JAXP和JAXB的:
1,JAXP只能把对象数据和其它数据从XML文件中解析出来,如果要把解析出来的数据组装成Java对象的话,需要手动组装。
JAXB可以直接把XML内容转换成Java对象。
用JAXB自动组装和StAX手动组装的例子:http://www.cnblogs.com/qiyebao/p/4573071.html
用JAXB和StAX联合组装例子和一些测试的结果,非常好:https://dzone.com/articles/xml-unmarshalling-benchmark
http://stackoverflow.com/questions/25643097/can-a-part-of-xml-be-marshalled-using-jaxb-or-jaxb-stax
2,JAXP是JAXB读取过程中的一部分,JAXB默认的XML解析器就是StAX。
参考:
http://m.blog.csdn.net/article/details?id=3972043
http://m.blog.csdn.net/article/details?id=17293591
http://www.cnblogs.com/f1194361820/p/4467935.html
JAXB:
http://blog.bdoughan.com/2012/08/removing-jaxbelement-from-your-domain.html?m=1
http://www.ibm.com/developerworks/cn/webservices/1003_sunzg_jaxb/index.html
http://www.oschina.net/question/12_25295?fromerr=NeKC6Bry
https://docs.oracle.com/javase/tutorial/jaxb/intro/
http://www.oracle.com/technetwork/articles/javase/index-140168.html
http://www.vogella.com/tutorials/JAXB/article.html
http://m.blog.chinaunix.net/uid-20749563-id-718396.html
JAXP:
http://docs.oracle.com/javase/tutorial/jaxp/
http://www.ibm.com/developerworks/cn/xml/x-jaxp/index.html
StAX:
http://zangweiren.iteye.com/blog/647334
http://www.saxproject.org/event.html
http://www.xml.com/pub/a/2003/09/17/stax.html?page=1
http://www.vogella.com/tutorials/JavaXML/article.html#javaxml
StAX and SAX and DOM:(good)
http://dublintech.blogspot.jp/2011/12/jaxb-sax-dom-performance.html?m=1(需要用代理打开,3种解析器的性能测试)
http://tutorials.jenkov.com/java-xml/sax-vs-stax.html(从XML到StAX到DOM说明)
http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html
http://m.blog.csdn.net/article/details?id=17293591
http://m.blog.csdn.net/article/details?id=3972043
http://www.cnblogs.com/f1194361820/p/4467935.html