Java中如何将新建的DOM文档保存为.xml文件?
如何将新建的DOM文档保存为XML文件?
刚好我之前也处理过类似的需求,Java里要把DOM文档保存成XML文件,得用到javax.xml.transform包下的Transformer相关API,我给你把保存逻辑整合到你的现有代码里,这样更清晰:
首先,你可以先写一个通用的XML保存方法,然后在创建完新文档后调用它。完整代码示例如下:
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.io.File; // 假设这是你的方法内部代码 public void processXml(File iniFilePath) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); File file = iniFilePath.toFile(); Document doc; if (file.exists()) { doc = builder.parse(file); } else { doc = builder.newDocument(); Element root = doc.createElement("windows"); doc.appendChild(root); // 调用保存方法,把新建的文档写入文件 saveXmlToFile(doc, file); } } catch (Exception e) { e.printStackTrace(); } } // 通用的DOM文档保存方法 private void saveXmlToFile(Document doc, File outputFile) throws TransformerException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // 配置输出格式:开启缩进,指定缩进量,让XML更易读 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); // 可选:指定文件编码,比如UTF-8 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(outputFile); // 执行转换,将DOM写入文件 transformer.transform(source, result); }
这里有几个关键点需要注意:
- 必须处理
TransformerException异常(我上面是直接抛出,你也可以根据业务需求捕获处理) - 设置
INDENT和indent-amount属性可以让输出的XML带有缩进,避免生成一行到底的杂乱XML - 如果需要指定编码,通过
OutputKeys.ENCODING设置即可,默认一般是UTF-8,但显式指定更稳妥
另外要确保你已经导入了所有需要的类,上面的import语句已经列出来了,都是JavaSE自带的,不需要额外引入依赖。
内容的提问来源于stack exchange,提问作者Lukas




