Проблема 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);
но это также повлияет на пробелы внутри элементов.