Java读写xml-dom4j篇

dom4j介绍

官网:http://www.dom4j.org/
dom4j包下载地址:https://sourceforge.net/projects/dom4j/?source=directory (这里给的是1.6.1版本)

目前解析xml的方法有Dom和Sax这两种标准解析方式,还有第三方开发的JDom和dom4j工具。

由于Dom、Sax、JDom比较原始,操作复杂,封装不完善,现在主流使用dom4j操作xml。

而dom4j官方示例简单晦涩,例子还比较少,这里详细介绍其使用方法。

使用示例

读xml文档(解析)

<?xml version="1.0" encoding="UTF-8"?> 
<books> 
   <book id="001"> 
      <title>Harry Potter</title> 
      <author>J K. Rowling</author> 
   </book> 
   <book id="002"> 
      <title>Learning XML</title> 
      <author>Erik T. Ray</author> 
   </book> 
</books>
List列表解析xml 示例
package com.xm.xml;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;


public class ListDemo {

    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        File file = new File("properties/books.xml");
        Document document = reader.read(file);
        Element root = document.getRootElement();
        List<Element> childElements = root.elements();
        for (Element child : childElements) {
            //未知属性名情况下
            List<Attribute> attributeList = child.attributes();
            for (Attribute attr : attributeList) {
                System.out.println(attr.getName() + ": " + attr.getValue());
            }

            //已知属性名情况下
                /*System.out.println("id: " + child.attributeValue("id"));*/

            //未知子元素名情况下
            List<Element> elementList = child.elements();
            for (Element ele : elementList) {
                System.out.println(ele.getName() + ": " + ele.getText());
            }
            System.out.println();

            //已知子元素名的情况下
                /*System.out.println("title" + child.elementText("title"));
                System.out.println("author" + child.elementText("author"));*/
            //格式化美观而存在
            System.out.println();
        }
    }

}
使用Iterator迭代解析xml示例
package com.xm.xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;

public class IterDemo {
    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("properties/books.xml"));
        Element root = document.getRootElement();

        Iterator it = root.elementIterator();
        while (it.hasNext()) {
            Element element = (Element) it.next();

            //未知属性名称情况下
            /*Iterator attrIt = element.attributeIterator();
            while (attrIt.hasNext()) {
                Attribute a  = (Attribute) attrIt.next();
                System.out.println(a.getValue());
            }*/

            //已知属性名称情况下
            System.out.println("id: " + element.attributeValue("id"));

            //未知元素名情况下
            /*Iterator eleIt = element.elementIterator();
            while (eleIt.hasNext()) {
                Element e = (Element) eleIt.next();
                System.out.println(e.getName() + ": " + e.getText());
            }
            System.out.println();*/

            //已知元素名情况下
            System.out.println("title: " + element.elementText("title"));
            System.out.println("author: " + element.elementText("author"));
            System.out.println();
        }
    }
}
解析结果

这里写图片描述

创建xml文档
package com.xm.xml;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileOutputStream;

/**
 * Created by xuming on 2016/7/20.
 */

public class createXmlDemo {
    public static void main(String[] args) throws Exception {
        Document doc = DocumentHelper.createDocument();
        //增加根节点
        Element books = doc.addElement("books");
        //增加子元素
        Element book1 = books.addElement("book");
        Element title1 = book1.addElement("title");
        Element author1 = book1.addElement("author");

        Element book2 = books.addElement("book");
        Element title2 = book2.addElement("title");
        Element author2 = book2.addElement("author");

        //为子节点添加属性
        book1.addAttribute("id", "001");
        //为元素添加内容
        title1.setText("Harry Potter");
        author1.setText("J K. Rowling");

        book2.addAttribute("id", "002");
        title2.setText("Learning XML");
        author2.setText("Erik T. Ray");

        //实例化输出格式对象
        OutputFormat format = OutputFormat.createPrettyPrint();
        //设置输出编码
        format.setEncoding("UTF-8");
        //创建需要写入的File对象
        File file = new File("C:" + File.separator + "books.xml");
        //生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式
        XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
        //开始写入,write方法中包含上面创建的Document对象
        writer.write(doc);
    }
}
创建xml的结果

这里写图片描述

项目应用示例

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<modules id="123">
    <module>这个是module标签的文本信息</module>
    <module id="">
        <name>oa</name>
        <value>系统基本配置</value>
        <descript>对系统的基本配置根目录</descript>
        <module>这个是子module标签的文本信息</module>
    </module>
    <module>
        <name>管理配置</name>
        <value>none</value>
        <descript>管理配置的说明</descript>
        <module id="106">
            <name>系统管理</name>
            <value>0</value>
            <descript>Config</descript>
            <module id="107">
                <name>部门编号</name>
                <value>20394</value>
                <descript>编号</descript>
            </module>
        </module>
    </module>
</modules>

解析代码

package com.xm.xml;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

/**
 * Created by xuming on 2016/7/20.
 */
public class ParseDemo {
    public static void main(String[] args) throws Exception {
        ParseDemo parseDemo = new ParseDemo();
        parseDemo.parse();
    }

    public void parse() {
        try {
            //创建SAXReader读取器,专门用于读取xml
            SAXReader saxReader = new SAXReader();
            File file = new File("properties/demo.xml");
            Document document = saxReader.read(file);
            Element rootElement = document.getRootElement();
            if (rootElement.elements("module") != null) {
                //因为第一个module标签只有内容没有子节点,直接.iterator()就java.lang.NullPointerException了, 所以需要分开实现
                List<Element> elementList = rootElement.elements("module");
                for (Element element : elementList) {
                    if (!element.getTextTrim().equals("")) {
                        System.out.println("【1】" + element.getTextTrim());
                    } else {
                        Element nameElement = element.element("name");
                        System.out.println("   【2】" + nameElement.getName() + ":" + nameElement.getText());
                        Element valueElement = element.element("value");
                        System.out.println("   【2】" + valueElement.getName() + ":" + valueElement.getText());
                        Element descriptElement = element.element("descript");
                        System.out.println("   【2】" + descriptElement.getName() + ":" + descriptElement.getText());

                        List<Element> subElementList = element.elements("module");
                        for (Element subElement : subElementList) {
                            if (!subElement.getTextTrim().equals("")) {
                                System.out.println("      【3】" + subElement.getTextTrim());
                            } else {
                                Element subnameElement = subElement.element("name");
                                System.out.println("      【3】" + subnameElement.getName() + ":" + subnameElement.getText());
                                Element subvalueElement = subElement.element("value");
                                System.out.println("      【3】" + subvalueElement.getName() + ":" + subvalueElement.getText());
                                Element subdescriptElement = subElement.element("descript");
                                System.out.println("      【3】" + subdescriptElement.getName() + ":" + subdescriptElement.getText());
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上具体代码及示例应用见我的github
结果
这里写图片描述

参考文献

Dom4j解析和生成XML文档:http://blog.csdn.net/chenghui0317/article/details/11486271
在java中使用dom4j解析xml:http://www.cnblogs.com/nerxious/archive/2013/05/04/3060263.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值