XML文档读取DOM4j

JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J。

  • Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
  • Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
  • 使用Dom4j开发,需下载dom4j相应的jar文件。
  • Dom4j的使用可参见其所提供的文档(quick start)

DOM4J需要加入两个包:dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar

参考下载地址:http://pan.baidu.com/s/1eS3X3DS

完整代码:

package package1112;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.IllegalAddException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class third {
    private static void find() throws DocumentException
    {
        //解析xml文档
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
          Element root = document.getRootElement(); 
          List<Element> list =root.elements();
          List<Element> list1 = list.get(1).elements();
          System.out.println(list1.get(1).getText());
         //输出特定节点特定属性的属性值
        Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
        System.out.println(e.attributeValue("title"));
    }
    /**创建子节点
     * @throws DocumentException
     * @throws IllegalAddException
     * @throws IOException
     */
    private static void addElement() throws DocumentException,IllegalAddException, IOException
    {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // 使用工具类DocumentHelper创建结点
        Element e = DocumentHelper.createElement("languge");
        e.setText("Chinese");
        e.addAttribute("bb", "boy");
        // 寻找父节点
        Element ee = (Element) document.selectNodes("//book").get(1);
        // 添加结点至内存文档
        ee.add(e);
        // Writing a document to a file,可以参考dom4j的API
        XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
        writer.write(document);
        writer.close();
    }

    /**删除子节点
     * @throws DocumentException
     * @throws IOException
     */
    private static void deleteElement() throws DocumentException, IOException
    {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // 读取待删除结点的父节点
        Element e = (Element) document.selectNodes("//languge").get(0);
        // 移除结点(内存)
        e.getParent().remove(e);
        // Writing a document to a file,可以参考dom4j的API
        XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
        writer.write(document);
        writer.close();
    }
    
    public static void main(String[] args) throws DocumentException
    {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
    }
}

代码解析:

总体:三个功能函数,一个主函数

功能函数1:find()

两种方式(传统方式,Xpath方式)输出特定节点的文本内容
输出特定的属性值

传统方式:

private static void find() throws DocumentException
    {
        //解析xml文档
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // Xpath解析模式
        Element e = (Element) document.selectNodes("//title").get(1);
        System.out.println(e.getText());
    }

Xpath方式:

    private static void find() throws DocumentException
    {
        //解析xml文档
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
          Element root = document.getRootElement(); 
          List<Element> list =root.elements();
          List<Element> list1 = list.get(1).elements();
          System.out.println(list1.get(1).getText());
         //输出特定节点特定属性的属性值
        Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
        System.out.println(e.attributeValue("title"));
    }

功能函数二: addElement()

创建新节点

    private static void addElement() throws DocumentException,IllegalAddException, 
    IOException
    {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // 使用工具类DocumentHelper创建结点
        Element e = DocumentHelper.createElement("languge");
        e.setText("Chinese");
        e.addAttribute("bb", "boy");
        // 寻找父节点
        Element ee = (Element) document.selectNodes("//book").get(1);
        // 添加结点至内存文档
        ee.add(e);
        // Writing a document to a file,可以参考dom4j的API
        XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
        writer.write(document);
        writer.close();
    }

功能函数三:deleteElement()

删除节点

private static void deleteElement() throws DocumentException, IOException
    {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        // 读取待删除结点的父节点
        Element e = (Element) document.selectNodes("//languge").get(0);
        // 移除结点(内存)
        e.getParent().remove(e);
        // Writing a document to a file,可以参考dom4j的API
        XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
        writer.write(document);
        writer.close();
    }
原文地址:https://www.cnblogs.com/excellencesy/p/7832492.html