【问题标题】:XMLFormatter issue with combimation of LF and CR LFLF 和 CR LF 组合的 XMLFormatter 问题
【发布时间】:2017-11-24 11:56:45
【问题描述】:

我正在使用 dom4j Outpurformat 和 Document 对象进行 XML 格式化。

如果Win -> \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 的组合。

【问题讨论】:

  • 输出是否来自 Windows 主机?
  • 是的windows主机

标签: java xml xml-parsing xml-formatting


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这与空格无关,因为我提到输入文件中的所有行都使用 EOL 修改为 LF(Linux 格式),即使我使用 notepad++ 将 EOL 转换为 Windows。使用格式化程序添加任何新行,它都带有“CR LF”。
    • 您使用的是哪个版本的 Dom4j?
    • 使用 dom4j 1.6.1
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多