java--DOM4j-SAXReader对xml文档的解析2

DOM4j-SAXReader解析:

Dom SUN
:dom在加载时,将所有元素全部加载内存
DOM4j-第三方。
Dom4j是一个开源、灵活的XML API。
目前很多开源框架如struts,hibernate都使用dom4j做为解析其xml的工具。
支持文档的读写功能和Xpath快速查询操作。

准备DOM4j:

    包: dom4j.x.jar

    包结构: org.dom4j

    类:
        org.dom4j.io.SAXReader–xml文档解析器

        org.dom4j.Document、Element–文档对像

              1.Element的一些方法

              2.Element.element(“name”)-此元素下的第一个name元素。

              3.Element.elementIterator(“name”)–此元素下的所有name元素。返回Iterator

              5.Element.getText()–返回元素包含的文本。

              6.Element.getAttribute(“name”)–返回名称为name的属性。

              7.Element.addElement(“name”);-添加一个name元素,同时返回name元素本身。

       org.dom4j.io.XMLWriter – 将Document写出的对像。

准备XML数据:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
    <user id="A001">
        <name>jack</name>
        <age>23</age>
    </user>
    <user id="A002">
        <name>张三</name>
        <age>20</age>
    </user>
    <user id="A003">
        <name>李四</name>
        <age>60</age>
    </user>


</users>
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

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

public class dom4jDemo {

    @Test//读取users.xml中第一个<user>元素的信息
    public void ReadDemo() throws Exception{
        //获取dom对象
        SAXReader reader=new SAXReader();
        Document dom=reader.read("./xml/users.xml");
        //获取根结点
        Element eUsers=dom.getRootElement();
        Iterator it=eUsers.elementIterator();
        while(it.hasNext()){
            Element e=(Element) it.next();
            String id=e.attributeValue("id");
            String id2=e.attribute("id").getValue();
            String name=e.element("name").getText();
            String name2=e.elementText("name");
            System.out.println("id="+id+"id2="+id2+"name="+name+"name2="+name2);
        }
    }
    @Test//读取users.xml中第一个<user>元素的信息
    public void WriterDemo() throws Exception{
        //获取dom对象
        SAXReader root=new SAXReader();
        Document dom=root.read("./xml/users.xml");
        //获取根结点
        Element eUsers=dom.getRootElement();
        Element userNew=eUsers.addElement("user");
        userNew.addAttribute("id", "B001");
        userNew.addElement("name").setText("new");
//      userNew.element("name").addText("new");
        //userNew.addElement("name").addText("new");
//      userNew.addElement("name", "new");
        //
        XMLWriter w=new XMLWriter(new FileOutputStream("./xml/usersOut.xml"));//将待存储的dom树存到./xml/usersOut.xml中,也可以是原文档,但是会把原来的数据冲掉
        w.write(dom);
        w.close();//字符流中有缓存,必须手动刷
    }
    @Test//把最后一个节点删除
    public void DeleteDemo() throws Exception{
        SAXReader reader=new SAXReader();

        Document dom=reader.read(new File("./xml/users.xml"));

        Element root=dom.getRootElement();

//      获取最后一个root结点
        List<Element> list=root.elements();//
//      root.remove(list.get(list.size()-1));
        Element e=list.get(list.size()-1);
        e.getParent().remove(e);

        XMLWriter w=new XMLWriter(new FileOutputStream("./xml/usersOut2.xml"));
        w.write(dom);
        w.close();
    }
    @Test//把最后一个节点修改
    public void ChangeDemo() throws Exception{
        SAXReader reader=new SAXReader();
        Document dom=reader.read(new File("./xml/users.xml"));
        Element root=dom.getRootElement();
//      获取最后一个root结点
        List<Element> list=root.elements();//
//      root.remove(list.get(list.size()-1));
        Element e=list.get(list.size()-1);
//      e.attribute("id").setText("c001");
        e.addAttribute("id","c001");//如果该属性存在就修改,不在就添加
        e.element("age").setText("20");
        XMLWriter w=new XMLWriter(new FileOutputStream("./xml/usersOut3.xml"));
        w.write(dom);
        w.close();
    }
    @Test//本地原来不存在xml文档,现通过程序生成一个新的xml文档
    public void CreateDemo() throws Exception{
        //利用DocumentHelper类在内存中生成一个空的dom对象
        Document dom=DocumentHelper.createDocument();
        //为dom构建树
        Element root=dom.addElement("cities");
        Element ecity=root.addElement("city");
        ecity.addAttribute("id", "0727");
        ecity.addElement("name", "yiyang");
        ecity.addElement("history", "100");
        //把dom对象树存储到本地文件
        XMLWriter w=new XMLWriter(new FileOutputStream("./xml/city.xml"));
        w.write(dom);
        w.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值