DOM4J方式解析、创建XML文件(实例)

问:DOM4J是什么?

Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP

问:使用DOM4J需要什么条件?

使用DOM4J方式解析XML文档,需要在工程文件中导入dom4j.jar包 下载链接

(1)示例代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.MalformedInputException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

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;

public class Dom4JResolve {

    public static void main(String[] args)throws IOException {
        String file = "file/books.xml";
        Dom4JResolve dom4jResolve = new Dom4JResolve();
        //1.DOM4J方式解析xml文件
        try {
            List<Book> bookList = dom4jResolve.read(file);
            for(Book book : bookList){
                System.out.println(book.toString());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        //2.DOM4J方式创建xml文件
        dom4jResolve.dom4jCreateXml();
    }
    /**
     * Dom4j方式解析xml文件
     * @param fileName
     * @return
     * @throws MalformedInputException
     * @throws DocumentException
     */
    public List<Book> read(String fileName) throws MalformedInputException,DocumentException{
        List<Book> books = new ArrayList<Book>();
        Book book = new Book();
        //创建SAXReader实例
        SAXReader reader = new SAXReader();
        //从文件读取xml
        Document document = reader.read(new File(fileName));
        //获取root节点
        Element root = document.getRootElement();
        System.out.println("xml文件根节点:"+root.getName());
        //方式1.枚举
        for(Iterator i = root.elementIterator();i.hasNext();){
            Element element = (Element) i.next();
            book.setId(Integer.parseInt(element.attributeValue("id")));
            book.setBookName(element.elementText("bookName"));
            book.setAuthor(element.elementText("author"));
            book.setYear(element.elementText("year"));
            books.add(book);
            book = new Book();
        }

        return books;
    }
    /**
     * dom4j方式创建xml文件
     */
    public void dom4jCreateXml(){
        //创建document文档
          Document document = DocumentHelper.createDocument();
          //增加根节点
          Element bookstore = document.addElement("bookstore");
          //增加子元素
          Element book1 = bookstore.addElement("book");
          Element name1 = book1.addElement("name");
          Element title1 = book1.addElement("author");
          Element author1 = book1.addElement("year");

          Element book2 = bookstore.addElement("book");
          Element name2 = book2.addElement("name");
          Element title2 = book2.addElement("author");
          Element author2 = book2.addElement("year");

          //为子节点添加属性
          book1.addAttribute("id", "1");
          //为元素添加内容
          name1.setText("冰与火之歌");
          title1.setText("乔治马丁");
          author1.setText("2004");

          book2.addAttribute("id", "2");
          name2.setText("格林童话");
          title2.setText("格林");
          author2.setText("2006");

          //实例化输出格式对象
          OutputFormat format = OutputFormat.createPrettyPrint();
          //设置输出编码
          format.setEncoding("UTF-8");
          //创建需要写入的File对象
          File file = new File("file/cdom4j.xml");
          //生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式
          XMLWriter writer;
        try {
            writer = new XMLWriter(new FileOutputStream(file), format);
            //开始写入,write方法中包含上面创建的Document对象
            writer.write(document);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(2)Book实体类代码:

public class Book {
    private int id;//id-bok
    private String bookName;//书名
    private String author;//作者
    private String year;//年份
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }

    @Override
    public String toString() {
        return this.id+"---"+this.bookName+"---"+this.author+"---"+this.year;
    }
}

(3)创建的cdom4j.xml代码截图:

创建的cdom4j.xml代码截图

(4)用于解析的books.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book id="1">
    <bookName>冰与火之歌</bookName>
    <author>乔治马丁</author>
    <year>2004</year>
  </book>
  <book id="2">
    <bookName>格林童话</bookName>
    <author>格林</author>
    <year>2006</year>
  </book>
</bookstore>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值