xml解析方式

来源:互联网 发布:excel设置数据标签 编辑:程序博客网 时间:2024/06/08 05:42

1.DOM解析

原理:用IO流将xml文件一次性全部读取,加载进内存并以树状结构来存储

优点:适合解析一些小数据量的xml文件

缺点:不适用于大数据量的xml文件的解析,容易发生内存溢出

2.JODM解析

JDOM相比于DOM简化了API,使用起来能简单些

3.SAX解析

原理:不会将整个xml文档一次性全部加载进内存,而是从上到下读取文档,(基于事件驱动的机制)每解析到一个节点就存入集合中。

优点:解决了DOM解析xml文档时占用大量内存的问题,节省了系统资源,适合解析大数据量的xml文档

缺点:读取xml文件时,无法对文件进行修改

4.DOM4J解析

DOM4J的性能最好,非常适合解析大数据量的xml文件,hibernate就是用的DOM4J来读取XML配置文件

有如下xml文件:

<?xml version="1.0" encoding="UTF-8"?><users>    <user id="1">        <userName>John</userName>        <password>123456</password>    </user>    <user id="2">        <userName>Daiv</userName>        <password>654321</password>    </user></users>

解析代码如下:

package com.qjl.mycms.framework.xmlutil.dom4j;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;import com.qjl.mycms.sysmanage.bean.User;/** * 类描述: 通过DOM4J来解析xml文档以及生成xml文档 * 类名称: com.qjl.mycms.framework.xmlutil.dom4j.Dom4jXml * 创建人: qjl * 创建时间: 2017年5月24日 下午9:37:16 * @version V1.0 */public class Dom4jXml {    static List<User> userList = new ArrayList<User>();    /**     * 将xml文件解析成数据集合     * @Title: xmlToEntity     */    public static void xmlToEntity(){        //读取XML文档需要的对象        SAXReader reader = new SAXReader();        try {            //通过saxreader读取已存在的文档内容            Document doc = reader.read("src/user.xml");            //获取文档的根元素            Element root = doc.getRootElement();            //获取根元素下面的所有子元素            @SuppressWarnings("unchecked")            List<Element> elementList = root.elements();            User user = null;            for(Element element:elementList){                user = new User();                //获取属性                Attribute id = element.attribute("id");                //获取值                String value = id.getValue();                //设置实体类的属性值                user.setUserid(new Integer(value));                //获取子元素name                Element name = element.element("userName");                user.setUsername(name.getText());                Element password = element.element("password");                user.setUserpassword(password.getText());                userList.add(user);            }        } catch (DocumentException e) {            e.printStackTrace();        }        for(User user:userList){            System.out.println(user.getUsername()+"---"+user.getUserpassword());        }    }    /**     * 将数据集合生成xml文件     * @Title: entityToXml     */    public static void entityToXml(){        //创建文档对象        Document doc = DocumentHelper.createDocument();        //创建出根元素对象        Element root = DocumentHelper.createElement("users");        //把根元素对象和文档对象关联在一起        doc.setRootElement(root);        for(User user:userList){            //为根元素下面添加子元素            Element element = root.addElement("user");            //给子元素添加属性            element.addAttribute("id", user.getUserid().toString());            //为user接着添加子元素            Element name = element.addElement("userName");            name.setText(user.getUsername());            Element password = element.addElement("password");            password.setText(user.getUserpassword());        }        //建立字节输出流        OutputStream os = null;        //构造XML格式化对象        OutputFormat opf = new OutputFormat("   ",true,"utf-8");        //XML输出对象        XMLWriter writer = null;        try {            os = new FileOutputStream("src/dom4jUser.xml");            //创建XML输出流            writer = new XMLWriter(os,opf);            writer.write(doc);        } catch (IOException e) {            e.printStackTrace();        }finally{            try {                writer.close();                os.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }    @Test    public void test(){        xmlToEntity();        entityToXml();    }}