Java Document类详解:用法、实例及示例代码

发布时间:2023-05-18

一、什么是Java Document类

Document是Java中的一种类,用于描述HTML或XML文档。它提供了许多方法,可以获取文档的信息,其中包括文档的标题、元素、属性等等。使用Document类,我们可以方便地获取HTML或XML文档中的信息,以便我们对文档进行各种操作。

二、Java Document类的用法

1、创建Document对象

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document document = builder.parse(new File("file.xml"));

在上述代码中,首先我们使用DocumentBuilderFactory类的newInstance()方法获取一个工厂实例,然后使用该实例获取一个DocumentBuilder对象。最后,我们使用DocumentBuilder对象的parse()方法传入一个文件路径参数,就可以得到一个Document对象。

2、获取文档元素

Element rootElement = document.getDocumentElement();
System.out.println("根元素标签名:" + rootElement.getTagName());

在上述代码中,我们使用Document对象的getDocumentElement()方法获取文档的根元素,并获取该元素的标签名。

3、获取元素属性

NamedNodeMap attrs = element.getAttributes();
Node idAttr = attrs.getNamedItem("id");
System.out.println("id属性值:" + idAttr.getNodeValue());

在上述代码中,我们首先使用Element对象的getAttributes()方法获取元素的所有属性,然后使用NamedNodeMap对象的getNamedItem()方法获取指定名称的属性。最后,我们通过Node对象的getNodeValue()方法获取属性值。

4、获取元素子节点

NodeList childNodes = element.getChildNodes();
for(int i = 0; i < childNodes.getLength(); i++) {
    Node child = childNodes.item(i);
    if(child instanceof Element) {
        System.out.println("节点名:" + child.getNodeName() 
            + "  节点值:" + child.getTextContent());
    }
}

在上述代码中,我们使用Element对象的getChildNodes()方法获取元素的所有子节点,然后遍历每个子节点,如果子节点是一个Element对象,就获取其节点名和节点值(即文本内容)。

三、Java Document类示例代码

1、解析XML文档

假设我们有一个XML文件,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<students>
   <student id="001">
    <name>Tom</name>
    <age>18</age>
   </student>
   <student id="002">
    <name>Lucy</name>
    <age>19</age>
   </student>
</students>

下面是使用Java Document类解析该XML文档的示例代码:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLParser {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        Document document = builder.parse(new File("test.xml"));
        Element rootElement = document.getDocumentElement();
        System.out.println("根元素标签名:" + rootElement.getTagName());
        NodeList studentNodes = rootElement.getElementsByTagName("student");
        for(int i = 0; i < studentNodes.getLength(); i++) {
            Element student = (Element) studentNodes.item(i);
            NamedNodeMap attrs = student.getAttributes();
            Node idAttr = attrs.getNamedItem("id");
            System.out.println("id属性值:" + idAttr.getNodeValue());
            NodeList childNodes = student.getChildNodes();
            for(int j = 0; j < childNodes.getLength(); j++) {
                Node child = childNodes.item(j);
                if(child instanceof Element) {
                    System.out.println("节点名:" + child.getNodeName() 
                        + "  节点值:" + child.getTextContent());
                }
            }
        }
    }
}

2、生成XML文档

假设我们要生成一个XML文件,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<students>
   <student id="001">
    <name>Tom</name>
    <age>18</age>
   </student>
   <student id="002">
    <name>Lucy</name>
    <age>19</age>
   </student>
</students>

下面是使用Java Document类生成该XML文档的示例代码:

import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Element;
public class XMLGenerator {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        org.w3c.dom.Document document = builder.newDocument();
        Element rootElement = document.createElement("students");
        document.appendChild(rootElement);
        Element student1 = document.createElement("student");
        student1.setAttribute("id", "001");
        Element name1 = document.createElement("name");
        name1.setTextContent("Tom");
        Element age1 = document.createElement("age");
        age1.setTextContent("18");
        student1.appendChild(name1);
        student1.appendChild(age1);
        rootElement.appendChild(student1);
        Element student2 = document.createElement("student");
        student2.setAttribute("id", "002");
        Element name2 = document.createElement("name");
        name2.setTextContent("Lucy");
        Element age2 = document.createElement("age");
        age2.setTextContent("19");
        student2.appendChild(name2);
        student2.appendChild(age2);
        rootElement.appendChild(student2);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        DOMSource xmlSource = new DOMSource(document);
        StreamResult outputTarget = new StreamResult(new FileOutputStream(new File("test.xml")));
        transformer.transform(xmlSource, outputTarget);
    }
}

结语

Java Document类提供了一种方便的方式来解析和生成HTML或XML文档。无论是在读取网络上的数据,还是在将本地数据以XML格式存储时,Document类都能够帮助我们方便地实现这些任务。通过本文的介绍和示例代码,相信读者已经了解了Document类的使用方法,并能够应用Document类来进行XML文档的解析和生成。