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

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

 

dom4j介绍

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

  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...)。dom

  以后就能够使用其提供的API进行编程。工具

 

程序实例1

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

 

复制代码
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文档:ui

复制代码
<?xml version="1.0" encoding="UTF-8"?>

<student name="zhangsan">
    <hello>hello Text</hello>
    <world>world text</world>
</student>
复制代码

 

 

 

 

程序实例2

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

  首先,待分析的文档以下:.net

 

复制代码
<?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

相关文章
相关标签/搜索