You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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异常(我上面是直接抛出,你也可以根据业务需求捕获处理)
  • 设置INDENTindent-amount属性可以让输出的XML带有缩进,避免生成一行到底的杂乱XML
  • 如果需要指定编码,通过OutputKeys.ENCODING设置即可,默认一般是UTF-8,但显式指定更稳妥

另外要确保你已经导入了所有需要的类,上面的import语句已经列出来了,都是JavaSE自带的,不需要额外引入依赖。

内容的提问来源于stack exchange,提问作者Lukas

火山引擎 最新活动