`
lw671579557
  • 浏览: 106064 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

dom4j

    博客分类:
  • Xml
 
阅读更多

1、要生成和解析如下格式的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>

 2、两个数据实体类

      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;
    }
}

 

 3、使用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;
    }
    
    
}

 

 

 

 4、测试

 

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());
    }
}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    dom4j dom4j dom4j dom4j

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单易行。在Java世界中,DOM4J是与DOM、SAX和JDOM等其他XML处理库并驾齐驱的一个选择,尤其在处理...

    dom4j_dom4j1.6.1安装包_

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、查询和修改变得更为简单。在本文中,我们将深入探讨DOM4J 1.6.1版本的安装及其在Maven项目中的应用。 首先,DOM4J...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、修改和查询变得简单。这次我们有两个版本的DOM4J库:1.6.1和2.0.0-ALPHA。这两个版本在功能、性能和API设计上都有所...

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    标题提及的"dom4j_1.6.1.jar"和"dom4j_2.1.0.jar"是两个不同版本的DOM4J库的Java档案文件,DOM4J是一个非常流行的Java XML API,用于处理XML文档。这两个版本的差异在于功能、性能优化和可能存在的bug修复。描述中...

    dom4j-2.1.1-API文档-中英对照版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j所依赖的所有jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得开发者可以方便地读取、写入、修改以及操作XML文件。DOM4J 1.6.1是这个库的一个稳定版本,发布于较早时期,但依然广泛应用于许多Java...

    dom4j-2.1.3.zip

    另一份重要的资源是"dom4j-2.1.3-sources.jar",它提供了DOM4J库的源代码,允许开发者深入研究DOM4J的内部实现,对于理解DOM4J的工作原理、进行扩展或者调试都是不可或缺的。通过阅读源代码,开发者可以学习到如何...

    dom4j1.1-1.6.1.rar

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,但它并不仅仅是一个DOM实现,它还包含...

    dom4j需要的包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了...

    dom4j-2.0.3.zip

    《深入解析DOM4J——基于Java的XML处理框架》 DOM4J,作为一个强大的Java XML API,是处理XML文档的主流工具之一。它提供了一套简单而高效的方式来操作XML文档,包括读取、写入、修改和遍历XML结构。在Java开发中,...

    dom4j-2.1.1-API文档-中文版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j.jar 下载

    DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML数据。在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它...

    所有版本的dom4j工具包

    标题提到的"所有版本的dom4j工具包"表明这是一个包含多版本DOM4J库的集合,可能包括了从早期到较新的一些版本,如dom4j-1.4.jar、dom4j-1.6.1.jar和dom4j-1.5.2.jar。这些不同版本的库可能分别对应于不同的功能特性...

    dom4j 2.1.1

    DOM4J 2.1.1 是一个针对Java平台的高效、开源的XML处理库,其全称为“Document Object Model for Java”。这个库提供了一系列强大的API,使得开发人员能够轻松地解析、创建、修改和操作XML文档。XML(eXtensible ...

    dom4j所需要的所有jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的方式来解析、创建、操作和理解XML数据。这个库在Java开发中广泛使用,因为它提供了比标准Java DOM API更简单、性能更好的XML处理方式。以下是...

    org.dom4j.jar

    当我们遇到“java.lang.ClassNotFoundException: org.dom4j.DocumentException”的错误提示时,这通常意味着系统中缺少了DOM4j库,只需将“org.dom4j.jar”添加到项目类路径中即可解决此问题。 DOM4J是基于DOM和SAX...

    DOM4J帮助文档及使用教程

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高性能的API,使得在Java应用程序中解析、创建、修改和操作XML文档变得容易。DOM4J因其易用性和丰富的功能集,在Java社区中广受欢迎,尤其在处理大型...

    DOM4J 的使用

    DOM4J 的使用 DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义...

Global site tag (gtag.js) - Google Analytics