提示:本文修订于2023年7月13日

1、JDOM诞生原因

因为DOM与平台和语言无关,是官方W3C 标准,并不能更好的发挥Java语言的自身特点,所以诞生了JDOM,它的目的是成为 Java 特定文档模型。

2、JDOM发展历程

由于是第一个 Java 特定模型,JDOM 一直得到大力推广和促进。后来,从JDOM分支延伸出来DOM4J,当然,这是后话,后面还会再详细介绍。

3、JDOM与DOM的区别

JDOM 与 DOM 主要有两方面不同:

(1)JDOM 仅使用具体类而不使用接口。这在某些方面简化了 API,但是也限制了其灵活性。
(2)API 大量使用了 Collections 类,简化了那些已经熟悉这些类的 Java 开发者的使用。

4、JDOM解析器介绍

JDOM 自身不包含解析器,通常使用 SAX解析器来解析和验证输入的 XML 文档。如下所示:

SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(new FileInputStream("src/main/resources/dom.xml"));

SAXBuilder是一个JDOM解析器,能够将路径中xml文件解析到Document对象

另外,还可以将以前构造的 DOM 表示作为输入。如下所示:

DOMBuilder dBuilder = new DOMBuilder();
File xmlFile = new File("src/main/resources/dom.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder = factory.newDocumentBuilder();
Document doc = dBuilder.build(domBuilder.parse(xmlFile));

5、JDOM常用的类

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.Attribute;

5.1、org.jdom2.Document的说明

与前文《Java DOM 操作经验总结》介绍的Java DOM(w3c标准)中的Document不同,在JDOM中Document是具体的类,而非接口,它最常用的方法是:getRootElement()

5.2、org.jdom2.Element和的org.jdom2.Attribute说明

与前文《Java DOM 操作经验总结》介绍的Java DOM(w3c标准)中的Element和Attribute不同,在JDOM中,可以利用Element和Attribute类的getName()方法和getValue()方法,使用很便捷,下文的例子有使用介绍。

5.3、org.jdom2.Element的getValue方法和getText方法的区别

getText方法只能获得本元素所包含的text文本值,而getValue方法不仅能获得本元素所包含的text值,还可以把其子代元素的值也获得。如下所示:

<users>
    <user id="1">
        <firstname>Peter</firstname>
        <lastname>Brown</lastname>
        <occupation>programmer</occupation>
    </user>  
</users>

users.getText()方法返回值为空,而users.getValue()方法返回值为:Peter Brown programmer

6、JDOM操作实战

xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user id="1">
        <firstname>Peter</firstname>
        <lastname>Brown</lastname>
        <occupation>programmer</occupation>
    </user>
    <user id="2">
        <firstname>Martin</firstname>
        <lastname>Smith</lastname>
        <occupation>accountant</occupation>
    </user>
    <user id="3">
        <firstname>Lucy</firstname>
        <lastname>Gordon</lastname>
        <occupation>teacher</occupation>
    </user>    
</users>

6.1、JDOM操作实战1:利用SAXBuilder解析xml文件

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class Jdom {

    public static void main(String[] args)
            throws FileNotFoundException, JDOMException, IOException {

        SAXBuilder sb = new SAXBuilder();
        Document doc = sb.build(new FileInputStream("src/main/resources/dom2.xml"));

        Element root = doc.getRootElement();

        List<Element> userList = root.getChildren();

        for (int i = 0; i < userList.size(); i++) {
            Element user = userList.get(i);
            List<Attribute> attList = user.getAttributes();

            for (Attribute attr : attList) {
                System.out.println(attr.getName() + "\t" + attr.getValue());
            }
        }

        System.out.println("\n----------------------------\n");

        for (int i = 0; i < userList.size(); i++) {
            Element user = userList.get(i);
            List<Element> eleList = user.getChildren();

            for (Element ele : eleList) {
                System.out.println(ele.getName() + "\t" + ele.getValue());
            }
            System.out.println("================================================");
        }
    }

}

6.2、JDOM操作实战2:利用DOMBuilder解析xml文件


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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.DOMBuilder;
import org.xml.sax.SAXException;

public class Jdom2 {

    public static void main(String[] args)
            throws FileNotFoundException, JDOMException, IOException, ParserConfigurationException, SAXException {

        DOMBuilder dBuilder = new DOMBuilder();
        File xmlFile = new File("src/main/resources/dom2.xml");
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder domBuilder = factory.newDocumentBuilder();
        Document doc = dBuilder.build(domBuilder.parse(xmlFile));

        Element root = doc.getRootElement();

        List<Element> userList = root.getChildren();

        for (int i = 0; i < userList.size(); i++) {
            Element user = userList.get(i);
            List<Attribute> attList = user.getAttributes();

            for (Attribute attr : attList) {
                System.out.println(attr.getName() + "\t" + attr.getValue());
            }
        }

        System.out.println("\n----------------------------\n");

        for (int i = 0; i < userList.size(); i++) {
            Element user = userList.get(i);
            List<Element> eleList = user.getChildren();

            for (Element ele : eleList) {
                System.out.println(ele.getName() + "\t" + ele.getValue());
            }
            System.out.println("================================================");
        }
    }

}

标签: none

添加新评论