1.什么是dom4j
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
2.如何使用dom4j解析xml文档
(1)在使用dom4j解析xml文档时,首先要到了dom4j的Jar包。
在工作目录下新建一个lib文件夹,把dom4j-1.6.1.jar包拷贝到lib文件夹下,选中dom4j-1.6.1.jar然后build Path就加载好jar包了。
具体操作:代码更直观
需要解析的xml文件(book.xml)
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>java程序设计</书名> <作者>张三</作者> <售价>309元</售价> <售价>45元</售价> <出版社>南京大学出版社</出版社> </书> <书> <书名>C语言程序设计</书名> <作者>李四</作者> <售价>40元</售价> <出版社>北京大学出版社</出版社> </书> </书架>
package DOM4J; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.OutputStreamWriter; 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; import org.junit.Test; public class Dom4jDemo { @Test //用dom4j读取xml文档 public void read() throws Exception { //获得DOCUMENT对象 SAXReader reader = new SAXReader(); //获取需要解析文档的路径 Document document = reader.read(new File("src/book.xml")); Element root = document.getRootElement(); List list = root.elements("书"); String bookname = ((Element) list.get(1)).element("书名").getText(); System.out.println(bookname); } @Test //用dom4j添加节点 public void add() throws Exception { //获得DOCUMENT对象 SAXReader reader = new SAXReader(); //获取需要解析文档的路径 Document document = reader.read(new File("src/book.xml")); Element root = document.getRootElement(); List list = root.elements("书"); ((Element) list.get(1)).addElement("出版社").setText("北京大学出版社"); //更新内存 // OutputFormat format=OutputFormat.createCompactFormat();//紧凑xml内容 OutputFormat format=OutputFormat.createPrettyPrint();//漂亮xml内容 format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format); writer.write(document); writer.close(); } @Test //用dom4j在指点位置添加节点 public void add1() throws Exception { //获得DOCUMENT对象 SAXReader reader = new SAXReader(); //获取需要解析文档的路径 Document document = reader.read(new File("src/book.xml")); Element root = document.getRootElement().element("书"); List<Element> list =root.elements(); Element price=DocumentHelper.createElement("售价"); price.setText("309元"); list.add(2, price); //更新内存 // OutputFormat format=OutputFormat.createCompactFormat();//紧凑xml内容 OutputFormat format=OutputFormat.createPrettyPrint();//漂亮xml内容 format.setEncoding("UTF-8"); //使用文件输入流 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format); writer.write(document); writer.close(); } @Test //用dom4j在指点位置添加节点 public void delete() throws Exception { //获得DOCUMENT对象 SAXReader reader = new SAXReader(); //获取需要解析文档的路径 Document document = reader.read(new File("src/book.xml")); Element root = document.getRootElement().element("书"); List<Element> list =root.elements(); for (Element element : list) { System.out.println(element.getName()); if(element.getName()=="出版社"){ element.getParent().remove(element); } } //更新内存 // OutputFormat format=OutputFormat.createCompactFormat();//紧凑xml内容 OutputFormat format=OutputFormat.createPrettyPrint();//漂亮xml内容 format.setEncoding("UTF-8"); //使用文件输入流 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format); writer.write(document); writer.close(); } @Test //用dom4j更新数据 public void update() throws Exception { //获得DOCUMENT对象 SAXReader reader = new SAXReader(); //获取需要解析文档的路径 Document document = reader.read(new File("src/book.xml")); Element root = document.getRootElement().element("书"); List<Element> list =root.elements(); for (Element element : list) { if(element.getName()=="出版社"){ element.setText("南京大学出版社"); } } //更新内存 // OutputFormat format=OutputFormat.createCompactFormat();//紧凑xml内容 OutputFormat format=OutputFormat.createPrettyPrint();//漂亮xml内容 format.setEncoding("UTF-8"); //使用文件输入流 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format); writer.write(document); writer.close(); } }