Java:将 DOM 写入 XML 文件(格式问题)

作者:编程家 分类: xml 时间:2025-04-26

使用Java语言编写程序时,我们经常需要将DOM(文档对象模型)写入XML文件。DOM是一种用于表示和操作XML文档的标准方式,它将XML文档解析成一个树状结构,使我们可以方便地对XML进行读取和修改。而将DOM写入XML文件则是将修改后的DOM树重新转化为XML格式,并保存到文件中。

在Java中,我们可以使用标准库中的javax.xml.transform包下的Transformer类来实现将DOM写入XML文件的功能。下面是一个简单的示例代码,展示了如何使用Java将DOM写入XML文件:

java

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

public class WriteDOMToXML {

public static void main(String[] args) {

try {

// 创建一个新的DOM文档

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.newDocument();

// 创建根元素

Element rootElement = doc.createElement("books");

doc.appendChild(rootElement);

// 创建子元素

Element bookElement = doc.createElement("book");

rootElement.appendChild(bookElement);

// 添加属性

bookElement.setAttribute("id", "1");

// 添加子节点

Element titleElement = doc.createElement("title");

titleElement.appendChild(doc.createTextNode("Java编程思想"));

bookElement.appendChild(titleElement);

Element authorElement = doc.createElement("author");

authorElement.appendChild(doc.createTextNode("Bruce Eckel"));

bookElement.appendChild(authorElement);

Element yearElement = doc.createElement("year");

yearElement.appendChild(doc.createTextNode("2007"));

bookElement.appendChild(yearElement);

// 将DOM写入XML文件

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer();

DOMSource source = new DOMSource(doc);

StreamResult result = new StreamResult(new File("books.xml"));

transformer.transform(source, result);

System.out.println("DOM写入XML文件成功!");

} catch (Exception e) {

e.printStackTrace();

}

}

}

上述代码的功能是创建一个包含书籍信息的DOM对象,并将其写入名为"books.xml"的XML文件中。首先,我们创建了一个新的DOM文档,并添加了根元素"books"。然后,我们创建了一个名为"book"的子元素,并为其添加了一个名为"id"的属性。接着,我们为"book"元素添加了三个子节点,分别是"title"、"author"和"year",并为它们添加了文本内容。最后,我们使用Transformer类将DOM对象写入XML文件。

以下是详细的代码解析:

1. 导入必要的类库

java

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

在代码的开头,我们导入了需要使用的类库,包括用于创建DOM对象的类库和用于将DOM写入XML文件的类库。

2. 创建DOM文档

java

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.newDocument();

首先,我们使用DocumentBuilderFactory类的newInstance()方法创建了一个DocumentBuilderFactory对象。然后,我们使用newDocumentBuilder()方法创建了一个DocumentBuilder对象。最后,我们使用newDocument()方法创建了一个新的DOM文档对象。

3. 创建根元素

java

Element rootElement = doc.createElement("books");

doc.appendChild(rootElement);

我们使用createElement()方法创建了一个名为"books"的根元素,并使用appendChild()方法将其添加到DOM文档中。

4. 创建子元素

java

Element bookElement = doc.createElement("book");

rootElement.appendChild(bookElement);

我们使用createElement()方法创建了一个名为"book"的子元素,并使用appendChild()方法将其添加到根元素中。

5. 添加属性

java

bookElement.setAttribute("id", "1");

我们使用setAttribute()方法为"book"元素添加了一个名为"id"的属性,并将其值设置为"1"。

6. 添加子节点

java

Element titleElement = doc.createElement("title");

titleElement.appendChild(doc.createTextNode("Java编程思想"));

bookElement.appendChild(titleElement);

Element authorElement = doc.createElement("author");

authorElement.appendChild(doc.createTextNode("Bruce Eckel"));

bookElement.appendChild(authorElement);

Element yearElement = doc.createElement("year");

yearElement.appendChild(doc.createTextNode("2007"));

bookElement.appendChild(yearElement);

我们使用createElement()方法创建了名为"title"、"author"和"year"的子元素,并使用appendChild()方法将其添加到"book"元素中。然后,我们使用createTextNode()方法创建了包含文本内容的文本节点,并使用appendChild()方法将其添加到相应的子元素中。

7. 将DOM写入XML文件

java

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer();

DOMSource source = new DOMSource(doc);

StreamResult result = new StreamResult(new File("books.xml"));

transformer.transform(source, result);

我们使用TransformerFactory类的newInstance()方法创建了一个TransformerFactory对象。然后,我们使用newTransformer()方法创建了一个Transformer对象。接着,我们使用DOMSource类将DOM对象包装为一个源对象。最后,我们使用StreamResult类将XML文件的输出目标指定为一个文件,并调用transform()方法将DOM写入XML文件。

8. 输出结果

java

System.out.println("DOM写入XML文件成功!");

在代码的最后,我们输出一条成功的提示信息,表示DOM写入XML文件操作成功。

通过上述示例代码,我们可以看到如何使用Java将DOM写入XML文件。只需要几行代码,我们就可以实现将修改后的DOM树重新转化为XML格式,并保存到文件中的功能。这样,我们就可以方便地操作XML文件,实现对XML数据的读取和修改。

本文介绍了使用Java将DOM写入XML文件的方法,并提供了一个示例代码来演示该过程。通过对DOM对象的创建和操作,我们可以方便地处理XML数据,并将其保存到文件中。使用这种方法,我们可以有效地操作XML文件,实现对XML数据的读取、修改和保存。希望本文对你理解Java中DOM写入XML文件的过程有所帮助。