e2

滴滴侠,fai抖

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

Java XML解析工具 dom4j介绍及使用实例

 

dom4j介绍

  dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory

  dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。

 

dom4j的使用

  下载了dom4j项目之后,解压缩,将其jar包(我的当前版本叫做dom4j-1.6.1.jar)加入class path下面。

  (Properties->Java Build Path -> Add External JARs...)。

  之后就可以使用其提供的API进行编程。

 

程序实例1

  第一个程序,用Java代码生成xml文档,代码如下:

 

package
 com.example.xml.dom4j;


import
 java.io.FileOutputStream;

import
 java.io.FileWriter;


import
 org.dom4j.Document;

import
 org.dom4j.DocumentHelper;

import
 org.dom4j.Element;

import
 org.dom4j.io.OutputFormat;

import
 org.dom4j.io.XMLWriter;


/**

 * dom4j框架学习 使用dom4j框架创建xml文档并输出保存
 * 
 
*/

public
 class
 Dom4JTest1
{

    
public
 static
 void
 main(String[] args) throws
 Exception
    {
        
//
 第一种方式:创建文档,并创建根元素
        
//
 创建文档:使用了一个Helper类

        Document document = DocumentHelper.createDocument();

        
//
 创建根节点并添加进文档

        Element root = DocumentHelper.createElement("student");
        document.setRootElement(root);

        
//
 第二种方式:创建文档并设置文档的根元素节点

        Element root2 = DocumentHelper.createElement("student");
        Document document2 
= DocumentHelper.createDocument(root2);

        
//
 添加属性

        root2.addAttribute("name", "zhangsan");
        
//
 添加子节点:add之后就返回这个元素

        Element helloElement = root2.addElement("hello");
        Element worldElement 
= root2.addElement("world");

        helloElement.setText(
"hello Text");
        worldElement.setText(
"world text");

        
//
 输出
        
//
 输出到控制台

        XMLWriter xmlWriter = new
 XMLWriter();
        xmlWriter.write(document);

        
//
 输出到文件
        
//
 格式

        OutputFormat format = new
 OutputFormat("    ", true
);//
 设置缩进为4个空格,并且另起一行为true

        XMLWriter xmlWriter2 = new
 XMLWriter(
                
new
 FileOutputStream("student.xml"), format);
        xmlWriter2.write(document2);

        
//
 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白

        XMLWriter xmlWriter3 = new
 XMLWriter(new
 FileWriter("student2.xml"),
                format);
        xmlWriter3.write(document2);
        xmlWriter3.flush();
        
//
 close()方法也可以


    }
}

 

  程序Console输出:

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

  生成的一个xml文档:

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


<
student 
name
="zhangsan"
>

    <
hello
>
hello Text</
hello
>

    <
world
>
world text</
world
>

</
student
>

 

 

 

 

程序实例2

  程序实例2,读入xml文档并分析,将其内容输出。

  首先,待分析的文档如下:

 

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


<
students 
name
="zhangsan"
>

    <
hello 
name
="lisi"
>
hello Text1</
hello
>

    <
hello 
name
="lisi2"
>
hello Text2</
hello
>

    <
hello 
name
="lisi3"
>
hello Text3</
hello
>

    <
world 
name
="wangwu"
>
world text1</
world
>

    <
world 
name
="wangwu2"
>
world text2</
world
>

    <
world 
>
world text3</
world
>

</
students
>

 

  Java代码:

package
 com.example.xml.dom4j;


import
 java.io.File;

import
 java.util.Iterator;

import
 java.util.List;


import
 javax.xml.parsers.DocumentBuilder;

import
 javax.xml.parsers.DocumentBuilderFactory;


import
 org.dom4j.Document;

import
 org.dom4j.Element;

import
 org.dom4j.io.DOMReader;

import
 org.dom4j.io.SAXReader;


/**

 * dom4j框架学习: 读取并解析xml
 * 
 * 
 
*/

public
 class
 Dom4JTest2
{
    
public
 static
 void
 main(String[] args) throws
 Exception
    {
        SAXReader saxReader 
= new
 SAXReader();

        Document document 
= saxReader.read(new
 File("students.xml"));

        
//
 获取根元素

        Element root = document.getRootElement();
        System.out.println(
"Root: " + root.getName());

        
//
 获取所有子元素

        List<Element> childList = root.elements();
        System.out.println(
"total child count: " + childList.size());

        
//
 获取特定名称的子元素

        List<Element> childList2 = root.elements("hello");
        System.out.println(
"hello child: " + childList2.size());

        
//
 获取名字为指定名称的第一个子元素

        Element firstWorldElement = root.element("world");
        
//
 输出其属性

        System.out.println("first World Attr: "
                + firstWorldElement.attribute(0).getName() + "="
                + firstWorldElement.attributeValue("name"));

        System.out.println(
"迭代输出-----------------------");
        
//
 迭代输出

        for
 (Iterator iter = root.elementIterator(); iter.hasNext();)
        {
            Element e 
= (Element) iter.next();
            System.out.println(e.attributeValue(
"name"));

        }

        System.out.println(
"用DOMReader-----------------------");
        DocumentBuilderFactory dbf 
= DocumentBuilderFactory.newInstance();
        DocumentBuilder db 
= dbf.newDocumentBuilder();
        
//
 注意要用完整类名

        org.w3c.dom.Document document2 = db.parse(new
 File("students.xml "));

        DOMReader domReader 
= new
 DOMReader();

        
//
 将JAXP的Document转换为dom4j的Document

        Document document3 = domReader.read(document2);

        Element rootElement 
= document3.getRootElement();

        System.out.println(
"Root: " + rootElement.getName());

    }

}

  代码运行后输出:

Root: students
total child count: 
6
hello child: 
3
first World Attr: name
=wangwu
迭代输出-----------------------
lisi
lisi2
lisi3
wangwu
wangwu2
null
用DOMReader-----------------------
Root: students

 

 

 

 

参考资料

  圣思园张龙老师XML视频教程。

  源代码下载处: http://sourceforge.net/

  搜索dom4j: http://sourceforge.net/projects/dom4j/?source=directory

 

posted on 2017-07-17 19:48  纯黑Se丶  阅读(454)  评论(0编辑  收藏  举报