使用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); } } }原文链接:https://www.f2er.com/xml/294827.html