我正在使用DOM将DOM文档(org.w3c.dom.Document)转换为Stream
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);
Run Code Online (Sandbox Code Playgroud)
该文档包含带换行符的文本节点('\n').在输出中,它们被替换为CRLF("\ r \n"),这是不希望的.有没有办法控制这个(当然,除了之后更换它们)?
我无法控制文档DTD( - > XML空格处理).
(备注:OutputKeys.INDENT不是正确的答案.)
备注:为什么这个问题与问题19102804不同(确保Unix风格的行结尾):
这个问题明确地提到了javax.xml.transform.Transformer以及影响其对行结尾处理的可能性.问题19102804要求任何解决方案,不仅仅是使用javax.xml.transform.Transformer的解决方案.
问题19102804仅限于获得"Unix风格的行结尾"的任务.在我的情况下,理想的解决方案是一个组件,它只是按原样推出DOM模型实例,而不是触及任何节点(到目前为止所做的一切).
更改line.separator系统属性不是一个选项(请参阅注释).
如果您只想序列化 DOM 节点,那么在 Java 世界中您可以使用LSSerializer
( https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/ls/LSSerializer.html )而不是默认值Transformer
,然后您就拥有该方法setNewLine
(https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/ls/LSSerializer.html#setNewLine(java.lang.String))定义或控制您首选的行结尾。