Java如何创建XML文件 Java DocumentBuilder使用方法

6次阅读

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

Java如何创建XML文件 Java DocumentBuilder使用方法

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

立即学习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")));

text=ZqhQzanResources