文章目录
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);
}
}