Сериализатор 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();
            }
        }
    }
}
Другие вопросы по тегам