我正在使用dom4j ofpurformat和文档对象进行XML格式。
我正在基于OS设置LinesEparator,如果Win -> rn 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","rn")
xmlContent = xmlContent.replaceAll("\n","rn")
它在Linux中正常工作,这是所有时间" LF",但上述问题在Windows主机上。它结合了LF和CF LF的结合。
字符串在Java中不可变。因此,必须替换线路断裂并分配到变量。
- cr = r; - 马车返回
- lf = n; - 线饲料
-
crlf = r n-线的结尾
xmlContent = xmlContent.ReplaceAll(" r n",")。repalceall(" n",")。repalceall(" r",");;
在我看来,dom4j的行为是正确的。它只需在缩进输出时添加newline(Windows OS的CR LF)即可。额外的LF来自原始文件(我想使用UNIX约定)。XML解析器将输入中的LF解释为文本节点,因此您也可以将它们放在输出上。如果您尝试
怎么办xmlContent = xmlContent.replaceAll("x0a","")
否则,您可以配置XML读取器以忽略Whitespace
SAXReader xmlReader = new SAXReader();
xmlReader.setStripWhitespaceText(true);
,但这也会影响元素内的白色空间。