XML学习---Dom4j学习

Dom4j 和前段时间学习的 DOM 类似,但是不同的是DOM4J是第三方公司制作的,学了一下他的基本语法,感觉确实更加好用,

我主要是收悉了一下用Dom4j来对XML文档进行增删改查。代码贴上分享
xml文档

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

<users> 
  <user id="b1212"> 
    <name>我不是jack</name>  
    <age>22</age> 
  </user>  
  <user id="A002"> 
    <name>张三</name>  
    <age>24</age> 
  </user>  
  <user id="B001"> 
    <name>小李</name>  
    <age>20</age> 
  </user>  
  <user id="B002"> 
    <name>小张</name>  
    <age>28</age> 
  </user>  
  <user id="C001"> 
    <name>刘备</name>  
    <age>35</age>  
    <user id="1111">ZJH</user> 
  </user>  
  <hncu id="888"> 
    <name>湖南城市大学</name>  
    <age>15</age> 
  </hncu>  
  <user id="12121"> 
    <name>周会飞</name>  
    <age>18</age> 
  </user> 
</users>

我老师用的代码:主要知识点更多,值得注意的地方都加了注解

package cn.hncu.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
/**
 * 
 * 学习方法:
 * 1) 打开dom4j项目包中docs/index.html --> Quick Start --> 在这一页中介绍了dom4j的基本操作
 * 2) index.html --> javadoc(1.6.1)  --> 进入该版本的API文档,可以查看每个包中的类及方法的说明
 * 3) 官网: http://www.dom4j.org/
 * 
 */
public class Dom4jDemo {
    @Test
    public void hello() throws DocumentException{
        //获取dom对象
        SAXReader sax = new SAXReader();
        Document dom = sax.read("./xml/users.xml");

        //获取根元素
        Element root = dom.getRootElement();

        //获取子元素
        /*
         root.element(name) //获取指定名称的第一个元素
         root.elementIterator();//获取所有的子元素---迭代器
         root.elementIterator(name);//获取指定名称的所有子元素
         root.elements();//获取所有的子元素---java.util.List
         root.elements(name) //获取指定名称的所有子元素
         root.attributeIterator(); //获取所有的属性
        */
        //需求: 把第一个<user>元素的信息获取出来
        Element eUser = root.element("user");
        String id = eUser.attributeValue("id");
        String name = eUser.element("name").getText();
        String age = eUser.elementText("age");
        System.out.println(id+","+name+","+age);

    }

    //CRUD--增删改查演示
    //查---遍历所有<user>
    @Test
    public void queryAll() throws DocumentException {
        Document dom = new SAXReader().read("./xml/users.xml");
        Element root = dom.getRootElement();
        Iterator<Element> it = root.elementIterator();
        while(it.hasNext()){
            Element eUser = it.next();
            String id = eUser.attributeValue("id");
            String name = eUser.element("name").getText();
            String age = eUser.elementText("age");
            System.out.println(id+","+name+","+age);
        }
    }

    //增---在root下添加一个<hncu>节点
    @Test
    public void add() throws Exception {
        Document dom = new SAXReader().read(new File("./xml/users.xml"));
        Element root = dom.getRootElement();

        //创建一个新的元素节点
        Element eHncu = root.addElement("hncu");
        Element eName = eHncu.addElement("name");
        eName.setText("湖南城市学院");
        Element eAge = eHncu.addElement("age");
        eAge.setText("15");
        eHncu.addAttribute("id", "666");

        ///以下这段专门演示保存功能/
        //保存---持久化---字符流要刷缓存
        //法1:简易方式 ---直接通过Document中的一个write(Writer w)来实现
        /*
        FileWriter fw = new FileWriter("./xml/users.xml"); 
        dom.write( fw ); 
        fw.close();
        */

        //法2:普通方式---通过XMLWriter中的一个write(dom)
        /*2.1用 构造 XMLWriter(OutputStream)
        XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
        xw.write(dom);
        xw.close();
        */
        /*2.2用 构造 XMLWriter(Writer)
        XMLWriter xw = new XMLWriter( new FileWriter("./xml/users.xml") );
        xw.write(dom);
        xw.close();
        */

        // 2.3用 构造 XMLWriter(OutputStream,OutputFormat) ---以指定的格式输出,可以解决中文乱码
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter xw = new XMLWriter(new FileOutputStream("./xml/users.xml"), format);
        xw.write(dom);
        xw.close();

    }

    //删---删除最后一个元素
    @Test
    public void del() throws Exception {
        Document dom = new SAXReader().read("./xml/users.xml");
        Element root = dom.getRootElement();

        //获取最后一个元素
        List<Element> list = root.elements();
        Element eLast = list.get( list.size()-1 );
        eLast.getParent().remove(eLast); // remove()删除的是直接孩子节点

        //保存
        XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
        xw.write(dom);
        xw.close();
    }

    //改---把最后一个元素的id属性 和 <name>中的文本内容修改了
    @Test
    public void update() throws Exception {
        Document dom = new SAXReader().read("./xml/users.xml");
        Element root = dom.getRootElement();

        //获取最后一个元素
        List<Element> list = root.elements();
        Element eLast = list.get( list.size()-1 );

        //修改id属性 和 <name>中的文本内容
        eLast.addAttribute("id", "888");//若该属性存在是修改,否则是添加
        eLast.element("name").setText("湖南城市大学");

        //保存
        XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
        xw.write(dom);
        xw.close();
    }

}

下面这个是我练习的时候写的代码

package cn.hncu.dom4j;

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

import org.dom4j.Document;
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 Dom4jDemo2 {
    //获取子元素
    /*
     root.element(name) //获取指定名称的第一个元素
     root.elementIterator();//获取所有的子元素---迭代器
     root.elementIterator(name);//获取指定名称的所有子元素
     root.elements();//获取所有的子元素---java.util.List
     root.elements(name) //获取指定名称的所有子元素
     root.attributeIterator(); //获取所有的属性
    */

    // 改-- 修改最后一个user元素的属性
        @Test
        public void update() throws Exception{
            System.out.println("33333");
            SAXReader reader = new SAXReader();
            Document dom = reader.read("./xml/users.xml");
            Element root = dom.getRootElement();
            Element eUser = root.element("user");
            eUser.setAttributeValue("id", "b1212");
            Element name =eUser.element("name");
            name.setText("我不是jack");
            save(dom, 3);
            query();

        }
    // 删-- 删除最后一个user元素
    @Test
    public void del() throws Exception{
        System.out.println("1111");
        SAXReader reader = new SAXReader();
        Document dom = reader.read("./xml/users.xml");
        Element root = dom.getRootElement();

        // 先找到再删
        List<Element> list = root.elements("user");
        Element elastUser = list.get( list.size()-1);
        elastUser.getParent().remove(elastUser);
        // 保存
        save(dom, 3);
        query();

    }
    @Test
    public void add() throws Exception{
        System.out.println("222");
        SAXReader reader = new SAXReader();
        Document dom = reader.read("./xml/users.xml");
        Element root = dom.getRootElement();

        Element user =root.addElement("user");
        user.addAttribute("id", "12121");
        Element name =user.addElement("name");
        name.setText("周会飞");
        Element age =user.addElement("age");
        age.setText("18");
        // 会按照格式输出
    /*  OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xw = new  XMLWriter( new FileWriter("./xml/users.xml"),format);
        xw.write(dom);
        xw.close();*/ 
        save(dom, 3);
        query();
    }

    // 查--- 
    public void query() throws Exception{

        /* SAXReader reader = new SAXReader();
            Document document = reader.read(url);
            return document;*/
        // 拿到dom 
        SAXReader reader = new SAXReader();
        Document dom = reader.read("./xml/users.xml");
        Element root = dom.getRootElement(); // 拿到根元素


        List<Element> users =root.elements("user");
        System.out.println("id\t姓名\t年龄");
        System.out.println("--------------------");
        for(int i=0;i<users.size();i++){
            Element e = users.get(i);
            String id= e.attributeValue("id");
            String name = e.element("name").getText(); 
            String age = e.element("age").getText(); 
            System.out.println(id+"\t"+name+"\t"+age);
        }

    }
    private void save (Document dom,int i) throws Exception{
        //保存---持久化---字符流要刷缓存
        //法1:简易方式 ---直接通过Document中的一个write(Writer w)来实现
        if(i==1){
            FileWriter fw = new FileWriter("./xml/users.xml"); 
            dom.write( fw ); 
            fw.close();
        }
        //法2:普通方式---通过XMLWriter中的一个write(dom)
       //*2.1用 构造 XMLWriter(OutputStream)
        if(i==2){
            XMLWriter xw = new XMLWriter( new FileOutputStream("./xml/users.xml"));
            xw.write(dom);
            xw.close();
            /*2.2用 构造 XMLWriter(Writer)
            XMLWriter xw = new XMLWriter( new FileWriter("./xml/users.xml") );
            xw.write(dom);
            xw.close();
            */
        }
        if(i==3){
            // 2.3用 构造 XMLWriter(OutputStream,OutputFormat) ---以指定的格式输出,可以解决中文乱码
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("utf-8");
            XMLWriter xw = new XMLWriter(new FileOutputStream("./xml/users.xml"), format);
            xw.write(dom);
            xw.close();
        }
    }

}

—分割线—–
Dom4j 有个技术就是,创建一个新的xml文档。我刚刚写了一个贴上

package cn.hncu.dom4j;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * 创建一个全新的xml文档
 * @author<a href="mailto:953801304@qq.com">胡龙华</a>
 * @version 2017-5-30  上午10:17:52
 * @fileName dom4j.java
 * 关键类或方法:DocumentHelper
 */

public class dom4j {

    public static void main(String[] args) throws Exception{
        // 在内存里面创建好了dom
        Document dom = DocumentHelper.createDocument();
        // 创建根元素
        Element root =dom.addElement("端午节");
        root.setText("端午节快乐!");
        //保存成一个文档
        OutputFormat format = OutputFormat.createCompactFormat();
        format.setEncoding("GB2312");
        XMLWriter xw = new XMLWriter(new FileOutputStream("./xml/duanwu.xml"), format);
        xw.write(dom);
        xw.close();
    }

}

创建好的XML文档在这里

<?xml version="1.0" encoding="GB2312"?>
<端午节>端午节快乐!</端午节>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值