使用dom4j查询xml
dom4j,是一个组织,针对xml解析,提供解析器 dom4j
dom4j不是javase的一部分,需要导入dom4j提供jar包
案例:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1 id1="aaa">
<name>张三</name>
<age>20</age>
</p1>
<p1 id2="bbb">
<name>李四</name>
<age>30</age>
</p1>
<p1 id3="ccc">
<name>王五</name>
<age>40</age>
</p1>
<p1 id4="ddd">
<name>赵六</name>
<age>50</age>
</p1>
</person>
package com.java.xml;
import java.io.FileOutputStream;
import java.io.IOException;
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 TestDom4j {
public static void main(String[] args) throws DocumentException, IOException {
// selectName();
// selectSingle();
// addSex();
// addAgeBefore();
// modifyAge();
// deleteSchool();
getValues();
}
/**
* 获取第一个p1里面的属性id1的值
* @throws DocumentException
*/
private static void getValues() throws DocumentException {
/*
* 1.创建解析器
* 2.得到document
* 3.获取第一个p1元素
* 4.得到p1里面的属性值
*/
//创建解析器
SAXReader saxReader = new SAXReader();
//得到document
Document document = saxReader.read("src/person.xml");
//获取第一个p1元素
Element root = document.getRootElement();
Element p1 = root.element("p1");
//得到p1里面的属性值
String str = p1.attributeValue("id1");
System.out.println(str);
}
/**
* 删除第一个p1下面的<school>ecit</school>元素
* @throws IOException
* @throws DocumentException
*/
private static void deleteSchool() throws IOException, DocumentException {
/*
* 1.创建解析器
* 2.得到document
* 3.得到根节点
* 4.得到第一个p1元素
* 5.得到p1元素下的school元素
* 6.使用p1删除school元素
* 7.回写xml
*/
//创建解析器
SAXReader saxReader = new SAXReader();
//得到document
Document document = saxReader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
//得到第一个p1元素
Element p1 = root.element("p1");
//得到school元素
Element school = p1.element("school");
//删除school
p1.remove(school);
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 修改第一个p1下面的age元素的值 <age>30</age>
* @throws DocumentException
* @throws IOException
*/
private static void modifyAge() throws DocumentException, IOException {
/*
* 1.创建解析器
* 2.得到document
* 3.得到根节点
* 4.得到第一个p1元素
* 5.得到第一个p1元素下面的age元素
* 6.修改age的值
* 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下面的age元素
Element age = p1.element("age");
//修改age元素的值
age.setText("30");
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 在第一个p1下面的age标签之前添加 <school>ecit.edu.cn</schlool>
* @throws DocumentException
* @throws IOException
*/
private static void addAgeBefore() throws DocumentException, IOException {
/*
* 1.创建解析器
* 2.得到document
* 3.获取根节点
* 4.获取第一个p1
* 5.获取p1下面的所有元素
* elements方法返回list
* 使用list里面的方法,在特定位置添加元素
* 创建元素,在元素下面创建文本
* add(int index, E element)
* 第一个参数是 位置 下标 从0开始
* 第二个参数是 要添加的元素
* 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下面创建文本
school.setText("石牌小学");
//在特定位置添加
list.add(1, school);
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 在第一个p1标签末尾添加一个元素 <sex>nv</sex>
* @throws DocumentException
* @throws IOException
*/
private static void addSex() throws DocumentException, IOException {
/*
* 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 sex = p1.addElement("sex");
//在sex中添加值
sex.setText("nv");
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 获取到一个name元素里面的值
* @throws DocumentException
*/
private static void selectSingle() throws DocumentException {
/*
* 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元素
List<Element> list = root.elements("p1");
Element p1 = list.get(2);
//得到p1下面的name元素
Element name = p1.element("name");
//获取name元素的值
String str = name.getText();
System.out.println(str);
}
/**
* 查询xml中所有name元素的值
* @throws DocumentException
*/
private static void selectName() throws DocumentException {
/*
* 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 name = element.element("name");
//得到name元素的值
String str = name.getText();
System.out.println(str);
}
}
}