我正在使用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系统属性不是一个选项(请参阅注释).
我有一个Java应用程序写入文件:
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
bw.write(line + lineTermination);
Run Code Online (Sandbox Code Playgroud)
线路终端定义为:
\r\n
Run Code Online (Sandbox Code Playgroud)
我把奇怪的,神秘的空白行插入我的文件中.
如果我将代码更改为:
bw.write(line);
bw.newLine();
Run Code Online (Sandbox Code Playgroud)
但是我想强制一个特定的行结束,而不是使用System属性.客户特别要求一个行结束字符 - 有些甚至有|.它不是一个可行的解决方案,只是使用\n.
以下是缺少行的数据片段:
"KABE","14/01/11","14:35","14:56","1987","US","SS","CO","MARRIED WITH CHILDREN","","EINE SCHRECKLICH NETTE FAMILIE","","N","10","","12","O'NEILL ED","13","SAGAL KATEY"
"PRO7","14/01/11","14:35","14:55","2001","US","SS","CO","SCRUBS","","SCRUBS DIE ANFAENGER","","C","10","BERNSTEIN ADAM","12","BRAFF ZACH","13","CHALKE SARAH"
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间 :-)