Проблема XMLFormatter с сочетанием LF и CR LF

Я делаю формат XML с использованием объектов dom4j Outpurformat и Document.

Я устанавливаю разделитель строк на основе ОС, если 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, как и ожидалось, все время "L F", но вышеупомянутая проблема на хосте Windows. это идет с комбинацией L F и CF LF.

2 ответа

Строка неизменны в Java. Поэтому приходится заменять разрывы строк и присваивать переменным.

  • CR = \ r; - Возврат каретки
  • LF = \n; - перевод строки
  • CRLF = \r\n - конец строки

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

Мне кажется, что поведение dom4j правильное. Он просто добавляет новую строку (CR+LF для ОС Windows) при отступе вывода. Дополнительные LF исходят из исходного файла (который, я думаю, использует соглашение Unix). Анализатор xml интерпретирует LF во входных данных как текстовые узлы, поэтому вы также получаете их на выходе. Что делать, если вы попробуете

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

В противном случае вы можете настроить свой xml-ридер на игнорирование пробелов.

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

но это также повлияет на пробелы внутри элементов.

Другие вопросы по тегам