【发布时间】:2017-07-23 15:50:14
【问题描述】:
我正在使用将 DOM 文档 (org.w3c.dom.Document) 转换为流
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, UTF_8.name());
ByteArrayOutputStream out = new ByteArrayOutputStream();
StreamResult output = new StreamResult(out);
Source input = new DOMSource(document);
transformer.transform(input, output);
文档包含带有换行符 ('\n') 的文本节点。在输出中他们 替换为不需要的 CRLF ("\r\n")。有没有办法控制这种情况(当然,除了事后替换它们)?
我无法控制文档 DTD(-> XML 空白处理)。
(备注:OutputKeys.INDENT 不是正确答案。)
备注:为什么这个问题与question 19102804 (Ensure Unix-style line endings)不同:
此问题明确提到 javax.xml.transform.Transformer 以及影响其对行尾处理的可能性。问题 19102804 要求任何解决方案,而不仅仅是使用 javax.xml.transform.Transformer 的解决方案。
问题 19102804 仅限于获取“Unix 风格的行尾”的任务。在我的情况下,理想的解决方案是一个组件,它按原样输出 DOM 模型实例,而不触及任何节点(到目前为止一切都是如此)。
更改 line.separator 系统属性不是一种选择(见注释)。
【问题讨论】:
-
设置系统属性 line.separator 为 \n
-
这可能是可能的,但这不是一个选项,因为它可能会破坏其他依赖于该属性正确值的代码。