1、使用dom4j查询xml
TextDom.java文件:
package ex01;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TextDom {
public static void main(String[] args) throws Exception{
selectName();
}
public static void selectName() throws Exception
{
/*
* 1、创建解析器
* 2、得到document
* 3、得到根节点
* 4、得到p1
* 5、得到p1下面的name
* 6、得到name里面的值
*/
SAXReader saxReader=new SAXReader();
Document document=saxReader.read("src/1.xml");
Element root=document.getRootElement();
List<Element> list=root.elements("p1");//得到p1
//遍历list
for (Element element : list) {
//element是每一个p1元素
//得到p1下面的name元素
Element name1=element.element("name");
//得到name里面的值
String s=name1.getText();
System.out.println(s);
}
}
}
1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1>
<name>aaa</name>
<age>bbb</age>
</p1>
<p1>
<name>ccc</name>
<age>bbb</age>
</p1>
</person>
注意:可以对得到的document的操作和回写xml的操作封装成方法,还可以把传递的文件路径封装成一个常量。好处:可以提高开发速度,提高代码可维护性。 后面的例子都用封装方法。
2、使用dom4j在第一个标签末尾添加元素
public static void addSex() throws Exception
{
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
Element root=document.getRootElement();
//得到第一个p1元素
Element p1=root.element("p1");
//在p1下面直接添加元素
Element sex1=p1.addElement("sex");
//在sex下面添加文本
sex1.addText("nan");
//回写xml
/*OutputFormat format=OutputFormat.createPrettyPrint();//有缩进效果
//OutputFormat format=OutputFormat.createCompactFormat();//压缩成一行
XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/1.xml"),format);
xmlWriter.write(document);
xmlWriter.close();*/
Dom4jUtils.XMLWriters(Dom4jUtils.PATH, document);
}
xml文件和第一题一样
3、使用dom4j在第一个p1标签下面的age标签之前添加<school>zyk</school>
public static void addAgeBefore() throws Exception
{
Document document=Dom4jUtils.getDocument("src/1.xml");
Element root=document.getRootElement();
Element p1=root.element("p1");//获取第一个p1
//获取p1下面所有元素
List<Element> list=p1.elements();
//创建元素
Element school=DocumentHelper.createElement("school");
//在元素下面添加文本
school.setText("zyk");
//在特定位置添加
list.add(1,school);
//回写xml
Dom4jUtils.XMLWriters("src/1.xml", document);
}
xml文件和第一题一样
4、封装的方法在Dom4jUtils类里面。
package ex01;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
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 {
public static final String PATH="src/1.xml";
//返回document
public static Document getDocument(String path)
{
try {
SAXReader reader=new SAXReader();
Document document = reader.read(path);
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//回写xml
public static void XMLWriters(String path,Document document)
{
try {
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path),format);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
5、使用dom4j实现删除节点操作
* 删除第一个p1下面的<school>zyk</school>
public static void delSch() throws Exception
{
/*
* 1、得到document
* 2、得到根节点
* 3、得到第一个p1
* 4、得到第一个p1下面的school标签
* 5、删除(使用p1删除school,通过remove方法)
* 6、回写xml
*/
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
Element root=document.getRootElement();
Element p1=root.element("p1");
Element school1=p1.element("school");
p1.remove(school1);
Dom4jUtils.XMLWriters(Dom4jUtils.PATH, document);
}