Если вы хотите этого, потому что считаете, что самозакрывающиеся теги некрасивы, то пройдите через это.
Если вы хотите передать выходные данные в какой-то неконтролируемый анализатор XML, который находится под контролем, то используйте более удобный анализатор или исправьте тот, который вы используете.
Если он находится вне вашего контроля, и вы должны отправить его неадекватному анализатору XML, тогда вам действительно нужен пролог? Если нет, то метод вывода HTML хорошо.
Если вам нужен пролог XML, то вы можете использовать метод вывода html и добавить пролог после преобразования, но перед отправкой его дефектному парсеру.
В качестве альтернативы, вы можете вывести его в виде XML с самозакрывающимися тегами и предварительно обработать его перед отправкой в дефектный синтаксический анализатор с помощью некоторой пользовательской сериализации с использованием DOM. Если он не может обработать самозакрывающиеся теги, то я уверен, что это не единственный способ, которым он не может проанализировать XML. Возможно, вам придется что-то сделать с пространствами имен, например.
Вы можете попробовать добавить пустой текстовый узел к любым пустым элементам, которые вы выводите. Это может помочь.