java xml解析框架_Java-XML解析第一篇主流开源类库解析XML

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

张惠

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 文档的增删改查动作,毕竟是以树模型加载到内存中进行的操作。有可能成为将来的主流。项目结构如下:

8964055144688c7d4b9996be6e910d53.png

pom.xml

dom4j

dom4j

1.6.1

xml-apis

xml-apis

剔除 xml-apis 的用意 JDK 中已经有对应的类。

App.java

packagecom.lfy.cn.javaXmlPasareTest;importjava.io.File;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.List;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;/***

**/

public classApp

{public static void main( String[] args ) throwsDocumentException, ParseException{

String path = System.getProperty("user.dir")+"\\src\\demo.xml";

SAXReader reader= newSAXReader();

Document document= reader.read(newFile(path));

List studentGridlbList = new ArrayList<>();

StudentGridlb studentGridlbVo;for (Object classGridlb : document.getRootElement().elements("classGridlb")) {

Element classGridlbEle=(Element) classGridlb;

DateFormat format= new SimpleDateFormat("yyyy-MM-dd");for (Object studentGridlb : classGridlbEle.element("studentGrid").elements("studentGridlb")) {

Element studentGridlbEle=(Element) studentGridlb;

studentGridlbVo= newStudentGridlb();

studentGridlbVo.setStu_id(studentGridlbEle.elementTextTrim("stu_id"));

studentGridlbVo.setStu_age(Integer.parseInt(studentGridlbEle.elementTextTrim("stu_age")));

studentGridlbVo.setStu_name(studentGridlbEle.elementTextTrim("stu_name"));

studentGridlbVo.setStu_birthday(format.parse(studentGridlbEle.elementTextTrim("stu_birthday")));

studentGridlbList.add(studentGridlbVo);

}

}

System.out.println(studentGridlbList);

}

}

运行结果:

ab4790618436bf481b0e50021e20bdc7.png

2》Jdom,基于树处理 XML,需要将树加载到内存中,所以解析大文件对内存的要求比较高。支持对 XML 文档的增删改查动作,毕竟是以树模型加载到内存中进行的操作。解析速度还可以。

pom.xml

jdom

jdom

1.1

JdomTest.java

package com.lfy.cn.javaXmlPasareTest;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.JDOMException;

import org.jdom.input.SAXBuilder;

import org.jdom.output.XMLOutputter;

/**

*

*

*/

public class JdomTest

{

public static void main( String[] args ) throws ParseException, FileNotFoundException, IOException, JDOMException{

String path = System.getProperty("user.dir")+"\\src\\demo.xml";

SAXBuilder jdomsaxBuilder = new SAXBuilder(false);

Document doc = jdomsaxBuilder.build(path);

Element rootElement = doc.getRootElement();

List studentGridlbList = new ArrayList<>();

StudentGridlb studentGridlb;

for (Object classGridlb : rootElement.getChildren("classGridlb")) {

Element classGridlbEle = (Element) classGridlb;

DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

for (Object studentGrid : classGridlbEle.getChild("studentGrid").getChildren("studentGridlb")) {

Element studentGridEle = (Element) studentGrid;

studentGridlb = new StudentGridlb();

studentGridlb.setStu_id(studentGridEle.getChildTextTrim("stu_id"));

studentGridlb.setStu_age(Integer.parseInt(studentGridEle.getChildTextTrim("stu_age")));

studentGridlb.setStu_name(studentGridEle.getChildTextTrim("stu_name"));

studentGridlb.setStu_birthday(format.parse(studentGridEle.getChildTextTrim("stu_birthday")));

studentGridlbList.add(studentGridlb);

}

}

XMLOutputter outputter = new XMLOutputter();

outputter.output(doc, new FileOutputStream(path));

System.out.println(studentGridlbList);

}

}

3》Xstream:基于注解不需要其它辅助类或映射文件 的OXMapping 技术。可以将 JavaBean 序列化为 XML,或将 XML 反序列化为 JavaBean,使得XML序列化不再繁琐。也可以将 JavaBean 序列化成 Json 或反序列化,使用非常方便。没有映射文件而且底层使用 xmlpull 推模型解析 XML,高性能、低内存占用,结合简洁明了的 API,上手基本是分分钟的事情。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值