Java中创建XML文件需用DOM解析:先通过DocumentBuilderFactory获取DocumentBuilder,再创建Document;接着用createElement、createTextNode等构建节点并组织层级;最后用Transformer将DOM树序列化为XML文件。

Java中创建XML文件常用DOM解析方式,核心是通过DocumentBuilder生成空文档,再用Document对象构建节点、设置内容,最后用Transformer写入文件。关键在于正确获取DocumentBuilder实例,避免直接new——必须通过DocumentBuilderFactory创建。
获取DocumentBuilder并新建Document
不能直接实例化DocumentBuilder,需通过工厂类获取线程不安全但轻量的builder:
- 调用
DocumentBuilderFactory.newInstance()获取工厂 - 可选:关闭验证和命名空间支持(如
setValidating(false)、setNamespaceAware(false))以提升性能 - 调用
newDocumentBuilder()得到builder,再用newDocument()创建空白XML文档
构建XML结构(添加元素、属性、文本)
从Document出发,逐层创建节点:
- 用
createElement("tagName")创建元素节点 - 用
createTextNode("text")创建文本内容 - 用
setAttribute("name", "value")为元素添加属性 - 用
appendChild()或insertBefore()组织父子关系(如root.appendChild(child)) - 根元素必须且只能有一个,通常先
appendChild(root)到document
将Document保存为XML文件
DOM树建好后需序列化输出,使用JAXP的Transformer:
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它不是新的编程语言,而是一种使用现有标准的新方法,最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。《php中级教程之ajax技术》带你快速
立即学习“Java免费学习笔记(深入)”;
- 调用
TransformerFactory.newInstance().newTransformer()获取transformer - 可设置缩进:
transformer.setOutputProperty(OutputKeys.INDENT, "yes"),并设缩进大小(如"{http://xml.apache.org/xslt}indent-amount", "2") - 用
DOMSource(sourceDoc)包装document,StreamResult(new File("out.xml"))指定输出目标 - 执行
transform(source, result)完成写入
完整示例(生成简单配置文件)
以下代码生成config.xml,含根节点、子元素及属性:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("config");
doc.appendChild(root);
Element db = doc.createElement("database");
db.setAttribute("type", "mysql");
db.setAttribute("version", "8.0");
db.appendChild(doc.createTextNode("localhost:3306"));
root.appendChild(db);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(new DOMSource(doc), new StreamResult(new File("config.xml")));









