dom4j是一个组织,针对xml解析,提供解析器dom4j
步骤
1、导入dom4j的jar包
创建文件夹lib,复制jar包到lib下面,右键点击jar:build path-add to buildpath
2、得到document
SAXReader reader = new SAXReader();
Document d = reader.read(url);
document里面的方法:getRootElement():获取根节点,返回Element
Element接口里面的方法:getParent()、addElement()
1、使用dom4j查询xml
查询所有name元素里面的值
a、创建解析器 SAXReader reader = new SAXReader()
b、得到document Document d = reader.read(url)
c、得到根节点 getRootElement(),返回Element
d、得到p1标签
elements(“p1”):获取每个标签下面的第一个首标签,返回list集合
遍历list得到每一个p1
e、得到name 执行element(qname):获取标签下面的第一个子标签,返回Element
f、获取name元素里面的值 getText
g、打印出f步骤
2、使用dom4j创建节点
a、创建解析器
b、得到docuemtn
c、得到根节点
d、得到第一个p1 使用element方法
e、在p1下面添加元素 addElement(“标签名称”),返回Element
f、添加文本 setText(“文本内容”)
g、回写xml XMLWriter xml = new XMLWriter(OutputStrem,OutputFormat)
OutputStrem :xml文件路径:new FileOutPutStream(“文件路径”)
OutputFormat格式化的值,使用createPretttyPrint方法
h、把文件添加进XMLWriter write
i、关闭XMLWriter close
3、在指定位置添加节点
a、创建解析器
b、得到docuemtn
c、得到根节点
d、得到第一个p1 使用element方法
e、获取p1下面的所有元素 elements方法,返回list集合,使用list的方法,在指定位置添加元素 add(int index,E element)
f、创建要添加的元素 documentHelper.createElement
g、创建文本
h、回写xml
i、把文件添加进XMLWriter
l、关闭XMLWriter
对得到document的操作和回写xml的操作,封装成方法;把传递的文件路径封装成一个常量
好处:提高开发速度,可以提高代码可维护性
4、修改节点的值
a、得到document
b、得到根节点,然后得到第一个p1标签
c、得到p1下面的标签
d、修改标签的值 setText
e、回写xml
5、删除节点
a、得到document
b、得到根节点
c、得到第一个p1标签
d、得到p1标签下面的标签
e、使用p1标签删除d remove
f、回写xml
6、使用dom4j获取属性的操作
a、得到document
b、得到根节点
c、得到第一个p1标签
d、得到p1里面的属性值 attributeValue
package cn.idcast1;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
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;
import cn.idcast2.Dom4jUtils;
public class Dom4jTest {
public static void main(String[] args) throws Exception {
// selectAll();
// selectFirst();
// selectSecond();
// add();
// addschool();
// modify();
// remove();
getValue();
}
// 获取属性值的操作
public static void getValue() {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root = d.getRootElement();
Element p1 = root.element("p1");
String s = p1.attributeValue("id");
System.out.println(s);
}
// 删除节点
public static void remove() {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root = d.getRootElement();
Element p1 = root.element("p1");
Element sch = p1.element("school");
p1.remove(sch);
Dom4jUtils.xmlwriters(Dom4jUtils.URL, d);
}
// 修改节点的值
public static void modify() {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root = d.getRootElement();
Element p1 = root.element("p1");
Element name1 = p1.element("name");
name1.setText("张三");
Dom4jUtils.xmlwriters(Dom4jUtils.URL, d);
}
// 在指定位置添加节点
public static void addschool() throws Exception {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root = d.getRootElement();
Element p1 = root.element("p1");
List<Element> list = p1.elements();
Element school = DocumentHelper.createElement("school");
school.setText("jinshan");
list.add(1, school);
Dom4jUtils.xmlwriters(Dom4jUtils.URL, d);
}
// 创建节点
public static void add() throws Exception {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root = d.getRootElement();
Element p1 = root.element("p1");
Element sex = p1.addElement("sex");
sex.setText("nv");
Dom4jUtils.xmlwriters(Dom4jUtils.URL, d);
}
// 得到第二个name元素里面的值 因为element方法表示的是得到第一个标签的值
public static void selectSecond() throws Exception {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root1 = d.getRootElement();
List<Element> list = root1.elements("p1");
Element index = list.get(1);
Element name1 = index.element("name");
String s = name1.getText();
System.out.println(s);
}
// 得到第一个name元素里面的值
public static void selectFirst() throws Exception {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element root1 = d.getRootElement();
Element p1 = root1.element("p1");
Element name1 = p1.element("name");
String s = name1.getText();
System.out.println(s);
}
// 得到所有的name元素里面的值
public static void selectAll() throws Exception {
Document d = Dom4jUtils.getDocuments(Dom4jUtils.URL);
Element e = d.getRootElement();
List<Element> l = e.elements();
for (Element element : l) {
Element e2 = element.element("name");
String s = e2.getText();
System.out.println(s);
}
}
}
封装方法
package cn.idcast2;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jUtils {
// 封装文件的地址,因为是常量,所有URL要大写
public static final String URL = "src/2.xml";
// 封装文件,返回Document
public static Document getDocuments(String url) {
try {
SAXReader sax = new SAXReader();
Document d = sax.read(url);
return d;
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
// 封装回写的xml
public static void xmlwriters(String url, Document d) {
try {
XMLWriter xmlw = new XMLWriter(new FileOutputStream(url),
OutputFormat.createPrettyPrint());
xmlw.write(d);
xmlw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}