【XML】dom4j解析xml(实现增删改查的操作)

1.dom4j简介

1.Jaxp是Javase部分
2.dom4j解析器不是JavaSe部分,所以需要向java工程目录下导入jar包
3.结合了sax方式和dom两种方式
4.得到document:
	SAXReader reader = new SAXReader();
	Document document = reader.read(url);
	
	Document是一个接口,父接口是Node:
	getRootElement() :获取根节点,返回的是Element
	
	Element是一个接口,父接口是Node:
	getParent() :获取父节点
	addElement():添加标签
<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
    <p1>
        <name>zhangsan</name>
        <age>20</age>
    	<sex>nv</sex></p1>
    <p1>
        <name>list</name>
        <age>30</age>
    </p1>
</person>

2.使用dom4j实现查询操作

获取所有name元素的值:

使用dom4j查询元素里面的值
1.创建解析器
2.得到document
3.得到根节点,getRootElement()
4.得到所有的p1标签:
	element(qname)
	获取标签下面的是qname名称的第一个子标签
	elements(qname)
	获取标签下面的是qname名称的所有子标签
	elements()
	获取标签下面的所有子标签
5.得到name
6.得到name里面的值
package dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class TestDom4j1 {
    public static void main(String[] args) throws DocumentException {
        //查询xml中所有name元素的值
        /*
        1.创建解析器
        2.得到document
        3.得到根节点
        4.得到p1
        5.得到p1下面的name
        6.得到name里面的值
         */
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("src\\person.xml");
        //得到根节点
        Element root = document.getRootElement();
        //得到所有的p1标签
        List<Element> list = root.elements("p1");
        //得到list
        for (Element element :list){
            //element是每一个p1元素
            //得到p1下面的name元素
            Element name1 = element.element("name");
            //得到name1里面的值
            String s = name1.getText();
            System.out.println(s);
        }
    }
}

获取第一个name元素的值:

package dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class TestDom4j2 {
    public static void main(String[] args) throws DocumentException {
        //查询xml中第一个name元素的值
        /*
        1.创建解析器
        2.得到document对象
        3.得到根节点
        4.得到第一个p1元素
        5.得到p1下面的name元素
        6.得到name元素里面的值
         */
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("src\\person.xml");
        //得到根节点
        Element root =  document.getRootElement();
        //得到第一个p1
        Element p1 = root.element("p1");
        //得到p1下面的那么元素
        Element name1 = p1.element("name");
        //得到name元素里面的内容
        String s = name1.getText();
        System.out.println(s);
    }
}

得到第二个name元素的值:

package dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class TestDom4j3 {
    public static void main(String[] args) throws DocumentException {
        //查询xml中第2个name元素的值
        /*
        1.创建解析器
        2.得到document
        3.得到根节点
        4.得到所有的p1标签
        5.得到第2个name元素
        6.得到name元素的值
         */
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("src\\person.xml");
        //得到根节点
        Element root = document.getRootElement();
        //得到所有的p1标签
        List<Element> list  = root.elements("p1");
        //得到第二个p1
        Element p2 = list.get(1);
        //得到p1下面的name
        Element name2 = p2.element("name");
        //得到name里面的值
        String s = name2.getText();
        System.out.println(s);
    }
}

3.使用dom4j实现添加操作

xml中p1标签末尾添加一个nv:

package dom4j;

import com.sun.xml.internal.txw2.output.SaxSerializer;
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 java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class TestDom4j4 {
    public static void main(String[] args) throws DocumentException, IOException {
        //xml中p1标签末尾添加一个<sex>nv</sex>
        /*
        1.创建解析器
        2.得到document
        3.得到根节点
        4.获取第一个p1元素
        5.在p1下面添加元素
        6.在添加完成之后的元素下面添加文本
        7.回写xml
         */
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("src\\person.xml");
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个p1元素
        Element p1 = root.element("p1");
        //在p1下面添加元素sex
        Element sex1 = p1.addElement("sex");
        //在sex下面天剑文本
        sex1.addText("nv");
        //回写xml
        //对写入的标签进行格式化
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src\\person.xml"),outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}

xml中之前添加一个元素:

package dom4j;

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 java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class TestDom4j5 {
    public static void main(String[] args) throws DocumentException, IOException {
        //xml中<age>之前添加一个元素<school>
        /*
        1.创建解析器
        2.得到document
        3.得到根节点
        4.获取所有的p1元素
        5.在list方法里面的特定位置添加元素,使用list里面的add(inr index,E element)方法
        6.回写xml
         */
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //得到document
        Document document = saxReader.read("src\\person.xml");
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个p1元素
        Element p1 = root.element("p1");
        //获取p1下面的所有元素
        List<Element> list = p1.elements();
        //创建元素
        Element school = DocumentHelper.createElement("school");
        //在元素里面创建文本
        school.setText("xuexiao");
        //在特定位置添加
        list.add(1, school);
        //回写xml
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src\\person.xml"), outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}

3.封装dom4j中的方法

package dom4jUtils;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.FileOutputStream;
import java.io.IOException;

public class Dom4jUtils {
    public static final String PATH="src\\person.xml";
    //封装document
    public static Document getDocument(String path){
        //创建解析器
        try {
            SAXReader saxReader = new SAXReader();
            //得到document
            Document document = saxReader.read(path);
            return document;
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return null;
    }

    //回写方法的封装
    public static void xmlWriter(String path,Document document){
        try {
            OutputFormat outputFormat = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path),outputFormat);
            xmlWriter.write(document);
            xmlWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package dom4jUtils;

import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j {
    public static void main(String[] args) {
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个p1元素
        Element p1 = root.element("p1");
        //在p1下面添加元素sex
        Element sex1 = p1.addElement("sex");
        //在sex下面天剑文本
        sex1.addText("nv");
        Dom4jUtils.xmlWriter(Dom4jUtils.PATH,document);
    }
}

4.使用dom4j实现修改操作

package dom4jUtils;

import com.sun.java.browser.plugin2.DOM;
import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j1 {
    public static void main(String[] args) {
        //修改第一个p1下面的age元素的值
      /*
      1.得到document
      2.得到根节点和第一个p1
      3.得到第一个P1下面的age元素
      4.修改值为40
      5.回写xml
       */
      //得到document
      Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
      //得到根节点
      Element root = document.getRootElement();
      //得到第一个p1
      Element p1 = root.element("p1");
      //得到p1下面放的age
      Element age = p1.element("age");
      //修改age的值
      age.setText("40");
      //回写xml
      Dom4jUtils.xmlWriter(Dom4jUtils.PATH,document);
    }
}

5.使用dom4j实现删除操作

package dom4jUtils;

import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j2 {
    public static void main(String[] args) {
        //删除第一个p1下面的school标签
        /*
        1.得到document
        2.得到根节点
        3.得到第一个p1
        4.得到第一个p1下面的school
        5.删除school
        6.回写xml
         */
        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
        //得到根节点
        Element root = document.getRootElement();
        //得到p1元素
        Element p1 = root.element("p1");
        //得到p1下面的school标签
        Element school = p1.element("school");
        //删除school,通过父节点删除
        /*
        获取父节点
        school.getParent();
        */
        p1.remove(school);
        //回写xml
        Dom4jUtils.xmlWriter(Dom4jUtils.PATH,document);
    }
}

6.使用dom4j获取属性的操作

<?xml version="1.0" encoding="UTF-8"?>
<person> 
  <p1 id1="ghh">
    <name>zhangsan</name>  
    <age>40</age>  
    <sex>nv</sex>  
    <sex>nv</sex> 
  </p1>  
  <p1> 
    <name>list</name>  
    <age>30</age> 
  </p1> 
</person>
package dom4jUtils;

import org.dom4j.Document;
import org.dom4j.Element;

public class TestDom4j3 {
    public static void main(String[] args) {
        //获取第一个p1的属性id1的值
        /*
        1.得到document
        2.得到根节点
        3.得到p1
        4.得到p1俩面的属性值
         */
       Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
       Element root = document.getRootElement();
       Element p1 = root.element("p1");
       String value = p1.attributeValue("id1");
       System.out.println(value);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一直在流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值