使用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);
}
}
}