我使用dom4j Outpurformat和Document对象进行XML格式化。
如果Win -> \r\n and Linux -> \n
如果我传递单行xml文件,它可以正常工作,获得预期的EOL(CR LF
)。
但如果我传递多行xml文件,无论现有行(LF
)是什么,都会附带新行(CR LF
)
ex: 输入文件:
<root>
<emp>
<name>myname</name>
</emp>
</root>
输出:
<root> LF
CR LF
<emp>LF
CR LF
<name>myname</name>LF
CR LF
</emp>LF
CR LF
</root>LF
CR LF
我试图更换EOL仍然无法正常工作 我试过双向
xmlContent= xmlContent.replaceAll("\n","\r\n")
xmlContent = xmlContent.replaceAll("\\n","\r\n")
它在Linux中的工作正常如预期所有&#34; LF&#34;,但上面提到的问题是在Windows主机上。它结合了LF和CF LF。
答案 0 :(得分:0)
字符串在java中是不可变的。因此必须替换换行符并分配给变量。
CRLF = \ r \ n - 行尾
xmlContent = xmlContent.replaceAll(&#34; \ r \ n&#34;,&#34;&#34;)。repalceAll(&#34; \ n&#34;,&#34;&#34 ;)repalceAll(&#34; \ R&#34;&#34;&#34;);;
答案 1 :(得分:0)
在我看来,dom4j的行为是正确的。它只是在缩进输出时添加换行符(Windows操作系统的CR + LF)。额外的LF来自原始文件(我猜想使用unix约定)。 xml解析器将输入中的LF解释为文本节点,因此您也可以在输出中获取它们。 如果你尝试
怎么办?xmlContent = xmlContent.replaceAll("\x0a","")
否则,您可以将xml阅读器配置为忽略空格
SAXReader xmlReader = new SAXReader();
xmlReader.setStripWhitespaceText(true);
但这也会影响元素内的空白区域。