操作xml文档
1. 解析(读取):将文档中的数据读取到内存中
2. 写入:将内存中的数据保存到xml文档中。持久化的存储
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
4.案例:导入jar包:
在java项目中创建lib目录,然后将jar包引入,右键lib目录选择 Add as Libary... -->> Module Libary
demo.xml
<图书列表 学校="XX大学">名著
<西游记 id="1">
<作者>吴承恩作者>
<朝代>明朝朝代>
西游记>
<水浒传 id="2">
<作者>施耐庵作者>
<朝代>明朝朝代>
水浒传>
<三国演义 id="3">
<作者>罗贯中作者>
<朝代>明朝朝代>
三国演义>
<红楼梦 id="4">
<作者>曹雪芹作者>
<朝代>清朝朝代>
红楼梦>
图书列表>
XmlDemo.java
package com.qf.xml;
import org.dom4j.Attribute;
import org.dom4j.document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.List;
public class XmlDemo {
@Test
public void testFile(){
File file = new File("G:\IdeaProjects\JavaEE\DOM4J\src\com\qf\xml/demo.xml");
System.out.println(file.length());
}
@Test
public void delete() throws Exception{
//创建解析器
SAXReader saxReader = new SAXReader();
//获取文件对象
File file = new File("G:\IdeaProjects\JavaEE\DOM4J\src\com\qf\xml/demo.xml");
//获取document对象
document doc = saxReader.read(file);
//先获取根节点(根元素)
Element root = doc.getRootElement();
//获取需要删除的节点(获取子元素)
Element ele = root.element("平凡的世界");
//调用删除的方法
ele.detach();
//设置写入的排版格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");//设置字符集
//创建写入的对象
FileOutputStream fileOutputStream = new FileOutputStream(file);
//写入到xml中
XMLWriter xmlWriter = new XMLWriter(fileOutputStream, outputFormat);
//调用写入的方法
xmlWriter.write(doc);
//关闭
xmlWriter.close();
}
@Test
public void update() throws Exception{
//创建解析器
SAXReader saxReader = new SAXReader();
//获取文件对象
File file = new File("G:\IdeaProjects\JavaEE\DOM4J\src\com\qf\xml/demo.xml");
//获取document对象
document doc = saxReader.read(file);
//先获取根节点(根元素)
Element root = doc.getRootElement();
//获取需要修改的节点(获取子元素)
Element ele = root.element("活着");
//修改元素名
ele.setName("平凡的世界");
//获取id属性
Attribute attribute = ele.attribute("id");
//修改id属性值
attribute.setValue("7");
//修改作者
ele.element("作者").setText("路遥");
//设置写入的排版格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");//设置字符集
//创建写入的对象
FileOutputStream fileOutputStream = new FileOutputStream(file);
//写入到xml中
XMLWriter xmlWriter = new XMLWriter(fileOutputStream, outputFormat);
//调用写入的方法
xmlWriter.write(doc);
//关闭
xmlWriter.close();
}
@Test
public void Add() throws Exception{
//创建解析器
SAXReader saxReader = new SAXReader();
//获取文件对象
File file = new File("G:\IdeaProjects\JavaEE\DOM4J\src\com\qf\xml/demo.xml");
//获取document对象
document doc = saxReader.read(file);
//先获取根节点(根元素)
Element root = doc.getRootElement();
//添加子节点
Element element = root.addElement("活着");
//添加
element.addAttribute("id","5");
//添加element的子节点
Element element1 = element.addElement("作者");
element1.addText("余华");
Element element2 = element.addElement("朝代");
element2.addText("现代");
//设置写入的排版格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");//设置字符集
//创建写入的对象
FileOutputStream fileOutputStream = new FileOutputStream(file);
//写入到xml中
XMLWriter xmlWriter = new XMLWriter(fileOutputStream, outputFormat);
//调用写入的方法
xmlWriter.write(doc);
//关闭
xmlWriter.close();
}
@Test
public void findAll() throws Exception{
//创建解析器
SAXReader saxReader = new SAXReader();
//获取文件对象
File file = new File("G:\IdeaProjects\JavaEE\DOM4J\src\com\qf\xml/demo.xml");
//获取document对象
document doc = saxReader.read(file);
//先获取根节点(根元素)
Element root = doc.getRootElement();
//获取根元素信息
System.out.println("根元素名称:"+root.getName());
System.out.println("根元素的属性:"+root.attribute(0).getName());
//System.out.println("根元素的属性:"+root.attribute("学校").getName());
System.out.println("根元素的属性的属性值:"+root.attributevalue("学校"));
System.out.println("根元素的文本内容:"+root.getTextTrim());
System.out.println("----------------------------------------");
//获取所有子节点(子元素)
List elements = root.elements();
//遍历
for(Element e : elements){
System.out.println(e.getName());
}
System.out.println("----------------------------------------");
//通过元素名获取单个元素
Element xyj = root.element("西游记");
System.out.println("西游记的id属性值:"+xyj.attributevalue("id"));
System.out.println("西游记的作者:"+xyj.element("作者").getTextTrim());
System.out.println("----------------------------------------");
getAll(root);
}
//查询xml中所有数据
public void getAll(Element element){
List elements = element.elements();
for(int i = 0;i
XpathDemo.java
package com.qf.xml;
import org.dom4j.document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class XpathDemo {
public static void main(String[] args) throws Exception {
//创建解析器
SAXReader saxReader = new SAXReader();
//获取文件对象
File file = new File("G:\IdeaProjects\JavaEE\DOM4J\src\com\qf\xml/demo.xml");
//获取document对象
document doc = saxReader.read(file);
//获取指定单个节点对象
Element ele = (Element)doc.selectSingleNode("/图书列表");
System.out.println(ele.getName());
//获取多个节点对象
List elements = doc.selectNodes("//作者");
for(Element e : elements){
System.out.println(e.getTextTrim());
}
}
}



