Как сохранить пробел перед элементом документа при разборе с Java?

В моем приложении я изменяю некоторую часть файлов XML, которая начинается следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ -->

<myElement>
...

Обратите внимание на пустую строку перед<myElement>, После загрузки, изменения и сохранения результат далеко не радует:

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ --><myElement>
...

Я обнаружил, что пробел (одна новая строка) между комментарием и узлом документа вообще не представлен в DOM. Следующий автономный код надежно воспроизводит проблему:

String source =
    "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<!-- foo -->\n<empty/>";
byte[] sourceBytes = source.getBytes("UTF-16");

DocumentBuilder builder =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc =
    builder.parse(new ByteInputStream(sourceBytes, sourceBytes.length));

DOMImplementationLS domImplementation =
    (DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
System.out.println(lsSerializer.writeToString(doc));

// output: <?xml version="1.0" encoding="UTF-16"?>\n<!-- foo --><empty/>

У кого-нибудь есть идеи, как этого избежать? По сути, я хочу, чтобы вывод был таким же, как ввод. (Я знаю, что объявление xml будет сгенерировано заново, потому что оно не является частью DOM, но здесь это не проблема.)

Ответы на вопрос(5)

Ваш ответ на вопрос