Java LF和CR LF组合的XMLFormatter问题
我正在使用dom4j Outpurformat和文档对象进行XML格式化 如果Java LF和CR LF组合的XMLFormatter问题,java,xml,xml-parsing,xml-formatting,Java,Xml,Xml Parsing,Xml Formatting,我正在使用dom4j Outpurformat和文档对象进行XML格式化 如果Win->\r\n和Linux->\n 如果我传递单行xml文件,它将正常工作,获得预期的EOL(crlf) 但是,如果我传递多行xml文件,无论现有行附带什么(LF),都会附带新行(CR-LF) 例: 输入文件: <root> <emp> <name>myname</name> </emp> </
Win->\r\n和Linux->\n
如果我传递单行xml文件,它将正常工作,获得预期的EOL(crlf
)
但是,如果我传递多行xml文件,无论现有行附带什么(LF
),都会附带新行(CR-LF
)
例:
输入文件:
<root>
<emp>
<name>myname</name>
</emp>
</root>
它在linux中工作正常,一直都是“LF”,但上面提到的问题是在windows主机上。它是LF和CF-LF的组合。字符串在java中是不可变的。所以必须替换换行符并分配给变量
- CR=\r;-回车
- LF=\n;-线路馈电
- CRLF=\r\n-行尾 xmlContent=xmlContent.replaceAll(“\r\n”和“).repalcell(“\n”和“).repalcell(“\r”和“)
- CR=\r;-回车
- LF=\n;-线路馈电
- CRLF=\r\n-行尾 xmlContent=xmlContent.replaceAll(“\r\n”和“).repalcell(“\n”和“).repalcell(“\r”和“)
- 字符串在java中是不可变的。所以必须替换换行符并分配给变量
- 在我看来,dom4j的行为是正确的。它只需在缩进输出时添加换行符(对于windows操作系统为CR+LF)。额外的LF来自原始文件(我猜它使用unix约定)。
xml解析器将输入中的LF解释为文本节点,这样您也可以在输出中获得它们。
如果你试试呢
xmlContent = xmlContent.replaceAll("\x0a","")
否则,您可以将xml读取器配置为忽略空白
SAXReader xmlReader = new SAXReader();
xmlReader.setStripWhitespaceText(true);
但这也会影响元素内部的空白。在我看来,dom4j的行为是正确的。它只需在缩进输出时添加换行符(对于windows操作系统为CR+LF)。额外的LF来自原始文件(我猜它使用unix约定)。 xml解析器将输入中的LF解释为文本节点,这样您也可以在输出中获得它们。 如果你试试呢
xmlContent = xmlContent.replaceAll("\x0a","")
否则,您可以将xml读取器配置为忽略空白
SAXReader xmlReader = new SAXReader();
xmlReader.setStripWhitespaceText(true);
但这也会影响元素内部的空白。输出是否来自Windows主机?是的Windows主机是来自Windows主机的输出?是的Windows主机这与空白无关,正如我提到的,输入文件中的所有行都使用EOL as LF(Linux格式)修改,甚至我使用记事本++转换windows的EOL。使用formatter无论添加了什么新行,它都带有“CR LF”。您使用的是Dom4j的哪个版本?使用Dom4j 1.6.1这与空白无关,正如我提到的,输入文件中的所有行都使用EOL修改为LF(Linux格式),甚至我使用notepad++转换windows的EOL。使用格式化程序无论添加了什么新行,它都带有“CR LF”。您使用的是Dom4j的哪个版本?使用的是Dom4j 1.6.1