1

我正在使用 dom4j Outpurformat 和 Document 对象进行 XML Format。

我正在根据操作系统设置 lineseparator ifWin -> \r\n and Linux -> \n

如果我通过单行 xml 文件,它可以正常工作,得到预期的 EOL ( CR LF)。

但是,如果我传递多行 xml 文件,无论现有行附带 ( LF) 新行附带 ( CR LF)

例如:输入文件:

    <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 中按预期工作正常“LF”,但上述问题在 Windows 主机上。它带有LF和CF LF的组合。

4

2 回答 2

0

字符串在java中是不可变的。所以必须替换换行符并分配给变量。

  • CR = \r; - 回车
  • LF = \n; - 换行
  • CRLF = \r\n - 行尾

    xmlContent = xmlContent.replaceAll("\r\n","").repalceAll("\n","").repalceAll("\r","");;

于 2017-11-24T12:02:53.113 回答
0

在我看来,dom4j 的行为是正确的。它只是在缩进输出时添加换行符(Windows 操作系统为 CR+LF)。额外的 LF 来自原始文件(我猜这是使用 unix 约定)。xml 解析器将输入中的 LF 解释为文本节点,因此您也可以在输出中获取它们。如果你尝试怎么办

xmlContent = xmlContent.replaceAll("\x0a","")

否则,您可以将 xml 阅读器配置为忽略空格

SAXReader xmlReader = new SAXReader();
xmlReader.setStripWhitespaceText(true);

但这也会影响元素内部的空白。

于 2017-11-24T12:57:01.007 回答