一般功能:dom4j-1.6.1.jar
扩展功能:jaxen-1.1-beta-6.jar
books.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>世界未解之谜</书名> <作者>项羽</作者> <售价>99.8元</售价> <简介>这书真好看</简介> </书> <书> <书名>葵花宝典</书名> <狗>大黄</狗> <作者>无语</作者> <售价>998两</售价> <简介>欲练此功...</简介> <团购价>1999两</团购价> </书> </书架>
MyDom4jUtil.java
package cn.itcast.utils; import java.io.FileOutputStream; import java.io.IOException; 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; /** * 使用DOM4J操作XML * @author Administrator * */ public class MyDom4jUtil { /** * 通过路径获取document对象 * @param path * @return * @throws DocumentException */ public static Document getDocument(String path) throws DocumentException{ // 获取解析器 SAXReader reader = new SAXReader(); return reader.read(path); } /** * 回写 * @param document * @param path * @throws IOException * @throws UnsupportedEncodingException */ public static void writeXML(Document document,String path) throws IOException{ // 设置格式 OutputFormat format = OutputFormat.createPrettyPrint(); // 创建回写的类 XMLWriter writer = new XMLWriter(new FileOutputStream(path),format); // 写 writer.write(document); // 关闭流 writer.close(); } }
Dom4jTest.java
package cn.itcast.dom4j; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import cn.itcast.utils.MyDom4jUtil; /** * DOM4J的练习 * @author Administrator * */ public class Dom4jTest { public static void main(String[] args) { try { run5(); } catch (Exception e) { e.printStackTrace(); } } /** * 对XPATH测试 * @throws Exception */ public static void run5() throws Exception{ String path = "src/book2.xml"; // 解析 Document document = MyDom4jUtil.getDocument(path); // 原来获取根节点 // 如果使用XPATH不用获取根节点 // * List selectNodes(String xpathExpression) // * Node selectSingleNode(String xpathExpression) // List<Node> authors = document.selectNodes("/书架/书/作者"); // 无论层级关系 /*List<Node> authors = document.selectNodes("//作者"); for (Node author : authors) { System.out.println(author.getText()); }*/ // /AAA/BBB[1] Node author = document.selectSingleNode("/书架/书[last()]/作者"); //author.setText("无语"); //MyDom4jUtil.writeXML(document, path); //System.out.println(author.getText()); } /** * 在指定位置添加子节点 * 在第二本书下的作者的节点之前添加狗的节点 * @throws Exception */ public static void run4() throws Exception{ String path = "src/book2.xml"; // 解析 Document document = MyDom4jUtil.getDocument(path); // 获取根节点 Element root = document.getRootElement(); // 先获取第二本书 Element book2 = (Element) root.elements("书").get(1); // 获取第二本书下的所有子节点 List<Element> list = book2.elements(); // 创建元素 Element dog = DocumentHelper.createElement("狗"); // 设置狗节点的文本内容 dog.setText("大黄"); // 操作list集合 list.add(1, dog); // 回写 MyDom4jUtil.writeXML(document, path); } /** * 修改文本内容 * @throws Exception */ public static void run3() throws Exception{ String path = "src/book2.xml"; // 解析 Document document = MyDom4jUtil.getDocument(path); // 先获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); // 获取团购价 book2.element("团购价").setText("1999两"); // 回写 MyDom4jUtil.writeXML(document, path); } /** * 添加子节点 * 在第二本书添加子节点 * @throws Exception */ public static void run2() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); // 解析XML文档,返回Document对象 Document document = reader.read("src/book2.xml"); // 获取根节点(书架的节点) Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); // 添加子节点 addElement() Element tgj = book2.addElement("团购价"); // 设置文本的内容 tgj.setText("9两"); // 设置好看的格式 OutputFormat format = OutputFormat.createPrettyPrint(); // 设置紧凑的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 设置XML文件的编码 format.setEncoding("UTF-8"); // 回写(XMLWriter类) 设置格式 设置编码 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"),format); // 把document写到ml文件中 writer.write(document); // 关闭流 writer.close(); } /** * 获取作者标签的文本内容 * @throws Exception */ public static void run1() throws Exception{ // 获取解析器对象SAXReader(DOM4J的SAX的解析器) SAXReader reader = new SAXReader(); // 解析XML的文档 Document document = reader.read("src/book2.xml"); // 记住1:如果想完成解析,必须先获取根节点 Element root = document.getRootElement(); // 记住2:DOM4J的解析必须是一层一层的解析 // 获取书架下面的书的节点 List<Element> books = root.elements("书"); // 循环遍历 for (Element book : books) { // 循环一次,获取作者的标签 Element author = book.element("作者"); // 获取文本内容 System.out.println(author.getText()); } } }