Dom4j解析XML

       Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4jAPI相对要复杂一些,但它提供了比JDOM更好的灵活性。

       Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j.

使用Dom4j开发,需下载dom4j相应的jar文件。

DOM4j中,获得Document对象的方式有三种:

  1.读取XML文件,获得document对象            

                   SAXReaderreader = new SAXReader();
 
            Document   document = reader.read(new File("input.xml"));

  2.解析XML形式的文本,得到document对象.

                 String text = "<members></members>";
             Document document= DocumentHelper.parseText(text);

  3.主动创建document对象.

                Document document= DocumentHelper.createDocument();
 
           //创建根节点

                  Element root = document.addElement("members");

XML文档 book.xml:

<?xml version="1.0" encoding="UTF-8"?>
<书架>
  <书 name="工具书">
    <书名>Java就业培训教程</书名>  
    <售价>19元</售价>
    <作者>张孝祥</作者>  
    <售价>209元</售价>  
    <售价>19元</售价>
  </>  
  <>
    <书名>JavaScript网页开发</书名>  
    <作者>张孝祥</作者>  
    <售价>28.00元</售价>
  </>
</书架>

解析类Dom4jXml.java

import java.io.FileOutputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Dom4jXml {
    // 读取xml中元素属性值
    @Test
    public void read() throws Exception {
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/book1.xml");

        Element root = document.getRootElement();
        Element bookname = root.element("书").element("书名");
        System.out.println(bookname.getText());
    }

    // 向xml文档中添加<售价>19元</售价>
    @Test
    public void add() throws Exception {
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/book1.xml");

        Element price = DocumentHelper.createElement("售价");// DocumentHelper
                                                            // dom4j中创建标签的类
        price.setText("29元");

        document.getRootElement().element("书").add(price);

        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
        writer.write(document);

        writer.close();

    }

    // 将xml文档中的<售价>29元</售价> 更新为<售价>39元</售价>
    @Test
    public void update() throws Exception {
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/book1.xml");

        Element price = (Element) document.getRootElement().element("书")
                .elements("售价").get(0);//通过elements得到多个售价元素,使用get(i)方法得到要更新的节点
        price.setText("39元");

        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
        writer.write(document);

        writer.close();

    }
    //删除xml指定元素属性
    @Test
    public void delete() throws Exception{
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/book1.xml");
        
        Element price = (Element) document.getRootElement().element("书")
        .elements("售价").get(0);
        price.getParent().remove(price);
        
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
        writer.write(document);

        writer.close();
    }
    //向指定位置添加元素
    @SuppressWarnings("unchecked")
    @Test
    public void adddir() throws Exception{
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/book1.xml");
        
        Element price =DocumentHelper.createElement("售价");
        price.setText("45元");
        
        
        List list =document.getRootElement().element("书").elements();//用list得到<书>节点下所有元素
        list.add(2,price);//通过list.add(item,element)指定位置添加元素
    
        
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
        writer.write(document);

        writer.close();

    }
}

 

posted @ 2013-06-08 23:46  亂舞春秋  阅读(206)  评论(0编辑  收藏  举报