You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java DOM Node转XML拆分版本声明行及移除回车符问题咨询

Java DOM转XML两个问题的修复方案

修复后的完整代码

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.Node;
import java.io.Writer;

public static void writeNode(final Node node, final Writer out) {
    try {       
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(node);
        // 原有缩进配置
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
        // 新增配置:解决XML声明与根标签同行问题
        transformer.setOutputProperty(OutputKeys.STANDALONE, "no");
        // 新增配置:指定编码和换行符,移除行尾\r
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.LINE_SEPARATOR, "\n");
        StreamResult result = new StreamResult(out);
        transformer.transform(source, result);
    } catch (TransformerException te) {
        // 可根据业务需要补充异常处理逻辑
        te.printStackTrace();
    }
}

配置说明

  • 解决XML声明与根标签同行问题:新增OutputKeys.STANDALONE属性配置,强制Transformer输出完整XML声明结构,触发声明后的自动换行逻辑,保证声明单独占首行,根标签从第二行开始。
  • 移除行尾回车符\r:通过OutputKeys.LINE_SEPARATOR强制指定换行符为\n,覆盖Transformer默认使用的系统换行符(Windows系统默认为\r\n,会额外生成\r),直接消除行尾多余的回车符。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:24:04