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
相关产品推荐
相关产品推荐

