DOM4j 解析xml文档,完成增删改查

  1. 新建java project, 在src下建包xml, 包里新建book1.xml文档,代码如下:
<?xml version="1.0" encoding="UTF-8"?>

<书架> 
  < name="yyyyyy" id="111"> 
    <售价>20元</售价>  
    <售价>22元</售价>  
    <书名>Java就业培训教程</书名>  
    <作者>张孝祥</作者>  
    <出版社>清华大学出版社</出版社> 
  </>  
  <> 
    <书名>JavaScript网页开发</书名>  
    <作者>张孝祥</作者>  
    <售价>28.00元</售价> 
  </> 
</书架>
  1. 建包cn.itcast.dom4j,包里建Demo1.java, 代码如下:
package cn.itcast.Dom4j;

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

import javax.xml.parsers.SAXParser;

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;
import org.junit.Test;


public class Demo1 {
    @Test
    public void read() throws Exception{
        //读取book.xml文档的内容

        //1. 读取XML文件,获得document对象
        SAXReader reader=new SAXReader();
        Document document =reader.read("src/xml/book1.xml");

        //2.获取文档的根节点.
        Element root=document.getRootElement();

        //3.获取某个节点的子节点,此处获取第一个书节点
        Element book=root.element("书");
        //获取书结点的另一种方式:获取文档的所有书结点,然后根据索引号取
        //Element book=root.elements("书").get(0);

        //4.获取书结点的第二个售价结点
        Element price=(Element) book.elements("售价").get(1);
        System.out.println(price.getText());

        //5.获取第一个书结点的name属性值
        String name=book.attribute("name").getValue();
        System.out.println("name="+name);

    }

    @Test
    public void add() throws Exception{
        //向book1.xml中第一个书结点中添加出版社结点

        //1. 读取XML文件,获得document对象
        SAXReader reader=new SAXReader();
        Document document =reader.read("src/xml/book1.xml");

        //2. 创建出版社结点,并设置其文本内容
        Element publish=DocumentHelper.createElement("出版社");
        publish.setText("清华大学出版社");

        //3. 把新创建的结点挂到其父结点下
        document.getRootElement().element("书").add(publish);

        /*
         * 把新建结点添加到指定位置,把“出版社”结点加到“书”结点的第二个位置
         * List list=document.getRootElement().element("书").elements();
         * list.add(1, publish);
         * 
         */

        //4. 把修改后的document由内存写回book1.xml
        //首先设置写回格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        //写回book1.xml文档
        XMLWriter writer=new XMLWriter(new FileOutputStream("src/xml/book1.xml"),format);
        writer.write(document);
        writer.close();

    }

    @Test
    public void update() throws Exception{
        //修改book1.xml中第一个书结点中的“出版社”结点

        //1. 读取XML文件,获得document对象
        SAXReader reader=new SAXReader();
        Document document =reader.read("src/xml/book1.xml");

        //2. 获取“出版社”结点
        Element publish=document.getRootElement().element("书").element("出版社");
        publish.setText("电子工业出版社");

        //4. 把修改后的document由内存写回book1.xml
        //首先设置写回格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        //写回book1.xml文档
        XMLWriter writer=new XMLWriter(new FileOutputStream("src/xml/book1.xml"),format);
        writer.write(document);
        writer.close();
    }

    @Test
    public void delete() throws Exception{
        //删除book1.xml中的“出版社”结点

        //1. 读取XML文件,获得document对象
        SAXReader reader=new SAXReader();
        Document document =reader.read("src/xml/book1.xml");

        //2. 获取“出版社”结点
        Element publish=document.getRootElement().element("书").element("出版社");
        //获取“出版社”结点的父结点,利用父结点删除
        publish.getParent().remove(publish);

        //4. 把修改后的document由内存写回book1.xml
        //首先设置写回格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        //写回book1.xml文档
        XMLWriter writer=new XMLWriter(new FileOutputStream("src/xml/book1.xml"),format);
        writer.write(document);
        writer.close();
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值