Сериализатор Xom теряет последующие пробелы в тексте
У меня недавняя проблема с последующими пробелами. Я добавляю текст с последующими пробелами к элементу XML. метод toXML Xom работает нормально, но запись через ByteArrayOutputStream с сериализатором сокращает пробелы.
String textWithMultipleSpaces=" a b c ";
Element el=new Element("foo");
el.appendChild(textWithMultipleSpaces);
Document doc=new Document(el);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Serializer serializer = new Serializer(out);
serializer.setIndent(indent);
serializer.setMaxLength(maxLength);
serializer.write(doc);
System.out.println(doc.toXML());
//<foo> a b c </foo>
System.out.println(out.toString());
//<foo> a b c </foo>
Последующие пробелы сокращаются до одного. Я не могу найти причину
НЕ: я вижу, что Xom Serializer удаляет эти пробелы только потому, что я использую отступ и setMaxLength. Есть ли сериализатор, который не трогает текст и делает только отступ?
1 ответ
Вместо этого я использовал альтернативный парсер ( Jsoup) для записи вывода. Это сработало для меня с сохранением пустого пространства в атрибутах.
Однако это решение преобразует все узлы / атрибуты в нижний регистр.
public static void writeXML(final File xmlFile, final Document doc) {
BufferedWriter xmlWriter = null;
try {
xmlWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(xmlFile),
"UTF-8"));
xmlWriter.write(Jsoup.parse(doc.toXML(), "", Parser.xmlParser()).toString());
} catch (final IOException e) {
e.printStackTrace();
} finally {
if (xmlWriter != null) {
try {
xmlWriter.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}
}