dom4j生成和解析xml文件

要生成和解析如下格式的xml文件:

 代码如下 复制代码

<?xml version="1.0" encoding="UTF-8"?>

<Message xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <User>
    <id>1</id>
    <name>李寻欢</name>
    <age>30</age>
    <Address>
      <id>1</id>
      <province>广东省</province>
      <city>广州市</city>
      <area>越秀区</area>
      <street>环市东路</street>
    </Address>
  </User>
</Message>  

1、两个数据实体类

    1)User类

 

 代码如下 复制代码

/**
 * @Description: 用户
 */
public class User {
   
    private Long id;
   
    //姓名
    private String name;
    //年龄
    private Integer age;
    //地址
    private Address address;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}    

2)Address类

 

 代码如下 复制代码

/**
 *
 * @Description: 地址
 */
public class Address {
   
    private Long id;
    //省份
    private String province;
    //城市
    private String city;
    //区县
    private String area;
    //街道
    private String street;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }
}

  

2、使用dom4j生成xml和解析xml的工具类

 

 代码如下 复制代码

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

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;

/**
 *
 * @Description: Xml生成解析工具
 * @author Luxh
 */
public class XmlUtil {
   
    /**
     * 生成xml文档
     * @param user 用户信息
     * @return
     */
    private static Document generateDocument(User user) {
       
        Document document = DocumentHelper.createDocument();
       
        //添加元素 Message
        Element messageElement = document.addElement("Message");
       
        //给Message元素添加属性 xmlns:xs="http://www.w3.org/2001/XMLSchema"
        messageElement.addAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema");
       
        //添加元素 User
        Element userElement = messageElement.addElement("User");
       
        //添加User子元素 id
        Element idElement = userElement.addElement("id");
        //给id元素赋值
        idElement.setText(String.valueOf(user.getId()));
       
        //添加User子元素 name
        Element nameElement = userElement.addElement("name");
        //给name元素赋值
        nameElement.setText(user.getName());
       
        //添加User子元素 age
        Element ageElement = userElement.addElement("age");
        //给age元素赋值
        ageElement.setText(String.valueOf(user.getAge()));
       
        //添加User子元素 Address
        Element addressElement = userElement.addElement("Address");
       
        //添加Address子元素 id
        Element addressIdElement = addressElement.addElement("id");
        //给id元素赋值
        addressIdElement.setText(String.valueOf(user.getAddress().getId()));
       
        //添加Address子元素 province
        Element provinceElement = addressElement.addElement("province");
        //给province元素赋值
        provinceElement.setText(user.getAddress().getProvince());
       
        //添加Address子元素 city
        Element cityElement = addressElement.addElement("city");
        //给city元素赋值
        cityElement.setText(user.getAddress().getCity());
       
        //添加Address子元素 area
        Element areaElement = addressElement.addElement("area");
        //给area元素赋值
        areaElement.setText(user.getAddress().getArea());
       
        //添加Address子元素 street
        Element streetElement = addressElement.addElement("street");
        //给street元素赋值
        streetElement.setText(user.getAddress().getStreet());
       
        return document;
    }
   
    /**
     * 生成xml文件
     */
    public static void generateXmlFile(User user) {
       
        Document document = generateDocument(user);
        XMLWriter out = null;
       
        BufferedWriter bw = null;
        OutputStreamWriter osw = null;
        FileOutputStream fos = null;
       
        try {
            File xmlFile = new File("D:/user.xml");//输出xml的路径
            fos = new FileOutputStream(xmlFile);
            osw = new OutputStreamWriter(fos,"UTF-8");//指定编码,防止写中文乱码
            bw = new BufferedWriter(osw);
           
            //对xml输出格式化
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
            out = new XMLWriter(bw, format);
            out.write(document);
           
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(out != null) {
                    out.close();
                }
                if(bw != null) {
                    bw.close();
                }
                if(osw != null) {
                    osw.close();
                }
                if(fos != null) {
                    fos.close();
                }
               
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
   
    /**
     * 解析xml文件
     * @param xmlFile
     * @return
     * @throws DocumentException
     */
    public static User analyzeXmlFile(File xmlFile) throws DocumentException {
       
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(xmlFile);
        //获取根元素Message
        Element messageElement = document.getRootElement();
       
        //获取Message元素下的子元素
        Iterator<Element> oneLevelElementItor = messageElement.elementIterator();
        Map<String,String> userAttrMap = new HashMap<String,String>();
        Map<String,String> addressAttrMap = new HashMap<String,String>();
       
        while(oneLevelElementItor.hasNext()){
            Element e1 = oneLevelElementItor.next();
            System.out.println("Message子元素:"+e1.getName());
            //获取User元素下的子元素
            Iterator<Element> twoLevelElementItor = e1.elementIterator();
            while(twoLevelElementItor.hasNext()) {
                Element e2 = twoLevelElementItor.next();
                System.out.println("User子元素:"+e2.getName());
                userAttrMap.put(e2.getName(), e2.getText());
               
                //获取Address下的子元素
                if("Address".equals(e2.getName())) {
                    Iterator<Element> threeLevelElementItor = e2.elementIterator();
                    while(threeLevelElementItor.hasNext()) {
                        Element e3 = threeLevelElementItor.next();
                        System.out.println("Address子元素:"+e3.getName());
                        addressAttrMap.put(e3.getName(), e3.getText());
                    }
                   
                }
            }
           
        }
       
        //将解析出来的数据封装成User
        User user = new User();
        user.setId(Long.valueOf(userAttrMap.get("id")));
        user.setName(userAttrMap.get("name"));
        user.setAge(Integer.valueOf(userAttrMap.get("age")));
       
        Address address = new Address();
        address.setId(Long.valueOf(addressAttrMap.get("id")));
        address.setProvince(addressAttrMap.get("province"));
        address.setCity(addressAttrMap.get("city"));
        address.setArea(addressAttrMap.get("area"));
        address.setStreet(addressAttrMap.get("street"));
       
        user.setAddress(address);
        return user;
    }
   
   
}  

  

3、测试

 代码如下 复制代码

import java.io.File;

import org.dom4j.DocumentException;
import org.junit.Test;

public class UserXmlTest {
   
    /**
     * 生成xml文件
     */
    @Test
    public void testGenerateXml() {
       
        //构造一个用户信息
        User user = new User();
        user.setId(1L);
        user.setName("李寻欢");
        user.setAge(30);
       
        Address address = new Address();
        address.setId(1L);
        address.setProvince("广东省");
        address.setCity("广州市");
        address.setArea("越秀区");
        address.setStreet("环市东路");
       
        user.setAddress(address);
       
        XmlUtil.generateXmlFile(user);
    }
   
   
    /**
     * 解析xml文件
     * @throws DocumentException
     */
    @Test
    public void testAnalyzeXmlFile() throws DocumentException {
        File xmlFile = new File("D:/user.xml");
        User user = XmlUtil.analyzeXmlFile(xmlFile);
        System.out.println("user'name is :"+user.getName());
        System.out.println("user'address'province is :"+user.getAddress().getProvince());
    }
}

时间: 2024-07-31 10:30:11

dom4j生成和解析xml文件的相关文章

php中SimpleXML生成与解析xml文件

例,生成xml文档  代码如下 复制代码 class SimpleXMLExtended extends SimpleXMLElement {   public function addCData($cdata_text) {     $node = dom_import_simplexml($this);     $no   = $node->ownerDocument;     $node->appendChild($no->createCDATASection($cdata_tex

java dom4j解析xml文件代码实例分享_java

解析xml文件有两种方式,一种是利用Dom去解析,这种方式写起代码比较麻烦,对于刚入手的程序员来说比较容易出问题:第二种就是使用Dom4j包去解析在要使用Dom4j包的时候,肯定要先引入包 复制代码 代码如下: import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.Iterator; import org.dom4j.Docum

dom4j解析xml文件实例

dom4j解析xml文件实例     package com.yanek.demo.xml.test; import java.io.File;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader; public class Dm4jReadXml {  /**  * @pa

如何使用jsp的 DOM4J 读取 解析 xml文件

如何使用jsp教程的 DOM4J 读取 解析 xml文件 <?xml version="1.0" encoding="GB2312"?> <RESULT>   <VALUE>        <NO>111cn.net</NO>        <ADDR>中国WEB第一站</ADDR>   </VALUE> </RESULT> <%@ page conte

java解析xml文件多个线程同时访问时内存溢出

问题描述 java解析xml文件多个线程同时访问时内存溢出,代码如下:解析的xml文件大小大概2M-10M,该怎么解决呢? String sourceFile = ConfigReader.get("data.store.path") + article.getSourceFile();org.dom4j.Document document = null;FileInputStream fin = null;try {fin = new FileInputStream(new File

java 使用JDOM解析xml文件

java中如何使用JDOM解析xml文件呢?以下小编就用实例为大家详细的介绍一下.需要的朋友可以参考下   JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作.JDOM直接为JAVA编程服务.它利用更为强有力的JAVA语言的诸多特性(方法重载.集合概念以及映射),把SAX和DOM的功能有效地结合起来. JDOM的官方地址:http://www.jdom.org/1.首先新建一个接口和2个类,为后续做准备[Moveable.java] 复制代

listview-Android下载解析xml文件ListView中数据无法更新,要添加一个线程应该可以。求帮助

问题描述 Android下载解析xml文件ListView中数据无法更新,要添加一个线程应该可以.求帮助 我用的Android4.1的手机和Android4.2的模拟器,项目可以正常运行,没有报错,就是下载xml文件解析的数据无法正常显示到Listview中.之前用了个Thread()的可以下载解析xml,不用Thread()的话,就无法下载解析XML中数据,但是在Listview中使用Thread()又要报错了. @Override public boolean onOptionsItemSe

深入浅出如何解析xml文件---上篇

    xml小伙伴们并不陌生,xml是可扩展标记语言,标准通用标记语言语言的子集,是一种用来标记电子文件使其具有结构性的标记语言.我们知道xml可以用dom与sax等方法进行解析,但是xml为什么要解析呢?为什么html就不用解析?小伙伴们可以思考一下,我们知道xml和html都是标签化的代码,其实也都是网页的一种写法,但是浏览器决定了显示什么,也就是浏览器直接解析html的基本标签,目前来说xml从一种网页应用,走向了一种格式化信息的应用,因为,我们需要使用xml里的这些信息,所以我们需要解

深入浅出如何解析xml文件---下篇

    在上篇博文中,小编主要介绍xml的两种解析方式,分别是dom4j和dom,今天这篇博文,小编主要来简单介绍一下xml的其她两种解析方式sax和jdom.     sax解析xml文件     sax,全称是Simple API for XML ,即是一种接口,也是一种软件包,她也是一种xml解析的替代方法,sax不同于dom解析,她逐行扫描文档,一边扫描一边解析,由于应用程序只是在读取数据时检查数据,因为不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势.     sax这种处理