一、DOM4j简介
DOM4j是一个简单、灵活的开放源代码的库。DOM4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,DOM4j使用接口和抽象类,虽然DOM4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
DOM4j是一个非常优秀的Java XML API,具有性能优秀、功能强大和极易使用的特点。现在很多软件采用的是DOM4j,例如Hibernate。
使用DOM4j开发,需要下载DOM4j相应的jar文件。
二、DOM4j获取作者的文本内容
book.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Javaweb开发实战</书名> <作者>哈哈</作者> <售价>1.01</售价> <简介>垃圾</简介> </书> <书> <书名>Java基础开发</书名> <作者>呵呵</作者> <售价>0.99</售价> <简介>这非常不错</简介> </书> </书架>
DOM4j解析book.xml
package cn.dom4j;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class DOM4jTest {
public static void main(String[] args) throws Exception {
run();
}
/**
* 获取第二个作者的名字
*/
@SuppressWarnings("unchecked")
public static void run() throws Exception {
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,获取DOcument对象
Document document = reader.read("src/book.xml");
//获取根节点--书架
Element root = document.getRootElement();
//获得书的节点,获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//获取作者的节点
Element atutor2 = book2.element("作者");
//获取文本内容
String autor2Name = atutor2.getText();
//输出文本的内容
System.out.println("第二个作者是:"+autor2Name);
}
}
三、在末尾添加节点
package cn.dom4j;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class DOM4jTest {
public static void main(String[] args) throws Exception {
add();
}
/**
* 在第二本下添加节点
*/
@SuppressWarnings("unchecked")
public static void add() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,返回Document对象
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//可以直接在第二本书下添加子节点,设置文本内容
book2.addElement("狗").addText("阿拉斯加神狗");
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 获取第二个作者的名字
*/
@SuppressWarnings("unchecked")
public static void run() throws Exception {
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,获取DOcument对象
Document document = reader.read("src/book.xml");
//获取根节点--书架
Element root = document.getRootElement();
//获得书的节点,获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//获取作者的节点
Element atutor2 = book2.element("作者");
//获取文本内容
String autor2Name = atutor2.getText();
//输出文本的内容
System.out.println("第二个作者是:"+autor2Name);
}
}
book2.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Javaweb开发实战</书名> <作者>哈哈</作者> <售价>1.01</售价> <简介>垃圾</简介> </书> <书> <书名>Java基础开发</书名> <作者>呵呵</作者> <售价>0.99</售价> <简介>这非常不错</简介> <狗>阿拉斯加神狗</狗> </书> </书架>
四、在指定的位置添加子节点
package cn.dom4j;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
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 DOM4jTest {
public static void main(String[] args) throws Exception {
addToSpecialPosition();
}
/**
* 在指定的位置添加子节点
* 在第二本的作者之前添加团购价的标签
*/
public static void addToSpecialPosition() throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//获取书下的所有子节点,返回List集合
List<Element> list = book2.elements();
//创建元素对象
Element GroupPurchasePrice = DocumentHelper.createElement("团购价").addText("0.01");
//list.add(int index,Element element)
list.add(1, GroupPurchasePrice);
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 在第二本下添加节点
*/
@SuppressWarnings("unchecked")
public static void add() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,返回Document对象
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//可以直接在第二本书下添加子节点,设置文本内容
book2.addElement("狗").addText("阿拉斯加神狗");
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 获取第二个作者的名字
*/
@SuppressWarnings("unchecked")
public static void run() throws Exception {
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,获取DOcument对象
Document document = reader.read("src/book.xml");
//获取根节点--书架
Element root = document.getRootElement();
//获得书的节点,获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//获取作者的节点
Element atutor2 = book2.element("作者");
//获取文本内容
String autor2Name = atutor2.getText();
//输出文本的内容
System.out.println("第二个作者是:"+autor2Name);
}
}
book3.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Javaweb开发实战</书名> <作者>哈哈</作者> <售价>1.01</售价> <简介>垃圾</简介> </书> <书> <书名>Java基础开发</书名> <团购价>0.01</团购价> <作者>呵呵</作者> <售价>0.99</售价> <简介>这非常不错</简介> </书> </书架>
五、删除和修改文档
package cn.dom4j;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
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 DOM4jTest {
public static void main(String[] args) throws Exception {
deleteSpecialPosition();
}
/**
* 删除子节点
* 删除第二本下的团购价的标签
*/
public static void deleteSpecialPosition() throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book3.xml");
//获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
Element GroupPurchasePrice = book2.element("团购价");
GroupPurchasePrice.getParent().remove(GroupPurchasePrice);
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 在指定的位置添加子节点
* 在第二本的作者之前添加团购价的标签
*/
public static void addToSpecialPosition() throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//获取书下的所有子节点,返回List集合
List<Element> list = book2.elements();
//创建元素对象
Element GroupPurchasePrice = DocumentHelper.createElement("团购价").addText("0.01");
//list.add(int index,Element element)
list.add(1, GroupPurchasePrice);
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 在第二本下添加节点
*/
@SuppressWarnings("unchecked")
public static void add() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,返回Document对象
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//可以直接在第二本书下添加子节点,设置文本内容
book2.addElement("狗").addText("阿拉斯加神狗");
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 获取第二个作者的名字
*/
@SuppressWarnings("unchecked")
public static void run() throws Exception {
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,获取DOcument对象
Document document = reader.read("src/book.xml");
//获取根节点--书架
Element root = document.getRootElement();
//获得书的节点,获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//获取作者的节点
Element atutor2 = book2.element("作者");
//获取文本内容
String autor2Name = atutor2.getText();
//输出文本的内容
System.out.println("第二个作者是:"+autor2Name);
}
}
package cn.dom4j;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
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 DOM4jTest {
public static void main(String[] args) throws Exception {
update();
}
/**
* 修改文本内容
*/
public static void update()throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book2.xml");
//获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//可以直接在第二本书下添加子节点,设置文本内容
book2.element("狗").setText("二哈");
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 删除子节点
* 删除第二本下的团购价的标签
*/
public static void deleteSpecialPosition() throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book3.xml");
//获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
Element GroupPurchasePrice = book2.element("团购价");
GroupPurchasePrice.getParent().remove(GroupPurchasePrice);
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 在指定的位置添加子节点
* 在第二本的作者之前添加团购价的标签
*/
public static void addToSpecialPosition() throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
//解析XML
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
// 获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//获取书下的所有子节点,返回List集合
List<Element> list = book2.elements();
//创建元素对象
Element GroupPurchasePrice = DocumentHelper.createElement("团购价").addText("0.01");
//list.add(int index,Element element)
list.add(1, GroupPurchasePrice);
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 在第二本下添加节点
*/
@SuppressWarnings("unchecked")
public static void add() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,返回Document对象
Document document = reader.read("src/book.xml");
//获取根节点
Element root = document.getRootElement();
//获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//可以直接在第二本书下添加子节点,设置文本内容
book2.addElement("狗").addText("阿拉斯加神狗");
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() );
writer.write(document);
writer.close();
}
/**
* 获取第二个作者的名字
*/
@SuppressWarnings("unchecked")
public static void run() throws Exception {
//获取解析器对象
SAXReader reader = new SAXReader();
//解析XML,获取DOcument对象
Document document = reader.read("src/book.xml");
//获取根节点--书架
Element root = document.getRootElement();
//获得书的节点,获取第二本书
List<Element> books = root.elements("书");
Element book2 = books.get(1);
//获取作者的节点
Element atutor2 = book2.element("作者");
//获取文本内容
String autor2Name = atutor2.getText();
//输出文本的内容
System.out.println("第二个作者是:"+autor2Name);
}
}
转载于:https://blog.51cto.com/11841428/1905320