1、流行的XML分析框架
1 )底层分析方式:编码复杂性、难以扩展、难以重用…… 想了解基础分析方式时,请了解Java XML基础分析方式
2 ) Dom4j )基于JAXP解析方式,性能优良,功能强大,使用方便的优秀框架。
3 ) Jdom :本质也基于JAXP,但是软件包结构被重新组织,API大量使用Collections类,在性能方面被dm4j推向了几个阶段。
4 ) xstream :基于xmlpull的OXMapping技术倾向于分析XML并将其映射到Java世界的对象。
2、编写简单的demo.xml文件,提供各种方式的分析
320170105000009363
0301
018574
030101
齐天
9
2008-11-07
030102
xndhlb
10
2009-04-08
030103
龙五
9
2008-11-01
420170105000007363
0302
018577
030201
马宝
10
2009-09-02
3、Dom4j、Jdom、Xstream不同的解析方式
1 ) Dom4j方式性能好,API灵活,支持XML文档的增删改操作。 只不过是以树形模型载入存储器的操作。 有可能成为未来的主流。 项目结构如下。
pom.xml
dom4j
dom4j
1.6.1
xml-apis
xml-apis
要排除xml-apis的JDK已经具有相应的类。
App.java
package com.LFY.cn.javaxmlpasaretest; importjava.io.File; importjava.text.DateFormat; importjava.text.ParseException; import Java.text.simple date format; importjava.util.ArrayList; importjava.util.List; importorg.dom4j.Document; importorg.dom4j.document exception; importorg.dom4j.Element; importorg.dom4j.io.SAXReader; /**
*/
公共类
{ publicstaticvoidmain (string [ ] args ) throwsDocumentException,ParseException{
string path=system.getproperty (user.dir ) ) (src(demo.XML );
SAXReader reader=newSAXReader (;
文档文档=读.读(new file (path ) );
liststudentgridlblist=new ArrayList (;
StudentGridlb studentGridlbVo; 对象classgridlb :文档. get rootelement ().elements('classgridlb ' ) }
元素类网格=(element ) classgridlbelb;
数据格式格式=newsimpledateformat (yyyy-mm-DD ); objectstudentgridlb : classgridlbele.element (' student grid ' ).elements ) (studentgridlb ) }
elementstudentgridlbele=(element ) studentgridlb;
sudentgridlbvo=newstudentgridlb (;
sudentgridlbvo.set stu _ id (studentgridlbele.elementtexttrim (stu _ id ) );
sudentgridlbvo.set stu _ age (integer.parseint ) studentgridlbele.elementtexttrim (stu _ age ) );
studentgridlbvo.set stu_name (studentgridlbele.elementtexttrim ) ) stu _ name );
sudentgridlbvo.set stu _ birthday (format.parse ) studentgridlbele.elementtexttrim (stu _ birthday ) );
sudentgridlblist.add (studentgridlbvo;
}
}
system.out.println (studentgridlblist;
}
}
执行结果:
2 ) Jdom需要基于树处理XML,将树加载到内存中,因此分析大文件对内存的要求很高。 支持XML文档的添加、删除、更改操作。 只不过是以树形模型加载到存储器中的操作。 分析速度还可以。
pom.xml
jdom
jdom
1.1
JdomTest.java
package com.LFY.cn.javaxmlpasaretest;
import Java.io.file not found exception;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import Java.text.simple date format;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
importorg.JDOM.input.sax builder;
importorg.JDOM.output.XML outputter;
//*
*
*
*/
公共类JDOM test
{
publicstaticvoidmain [ string [ ] args ] throwsparseexception,FileNotFoundException,IOException,JDOMException{
string path=system.getproperty (user.dir ) ) (src(demo.XML );
saxbuilderjdomsaxbuilder=new saxbuilder (false;
document doc=JDOM saxbuilder.build (path );
element rootelement=doc.get rootelement (;
liststudentgridlblist=new ArrayList (;
StudentGridlb studentGridlb;
物件类别网格lb : rootelement.get children (' classgridlb ' ) ) }
元素类网格=(element ) classgridlbelb;
数据格式格式=newsimpledateformat (yyyy-mm-DD );
对象网格: classgridlbele.get child (' student grid ' ).get children (for ) ) {
Element studentGridEle=(Element ) studentGrid;
studentGridlb=new StudentGridlb (;
studentgridlb.set stu _ id (studentgridele.getchildtexttrim (stu _ id ) );
studentgridlb.set stu_age (integer.parseint ) studentgridele.getchildtexttrim ) (stu _ age ) );
studentgridlb.set stu _ name (studentgridele.getchildtexttrim (stu _ name ) );
sudentgridlb.set stu_birthday (format.parse ) studentgridele.getchildtexttrim ) (stu _ birthday ) );
sudentgridlblist.add (studentgridlb;
}
}
xmloutputteroutputter=newxmloutputter (;
outputter.output(doc,newfileoutputstream ) path );
system.out.println (studentgridlblist;
}
}
3 ) Xstream :一种OXMapping技术,不需要基于注释添加辅助类或映射文件。 XML序列化并不麻烦,因为可以将JavaBean序列化为XML,也可以将XML反序列化为JavaBean。 也可以将JavaBean序列化为Json,或者反序列化,非常容易使用。 没有映射文件,而且基础上使用xmlpull推送模型分析XML,结合高性能、低内存占有率、简洁易懂的API,熟练掌握基本上是分钟的事。