Воспользуемся встроенным в groovy xml-парсером (XmlSlurper)
Вытащим все нэймспэйсы из xml элементов и уберем дубликаты
(такой способ не подойдет если используются атрибуты с нэймспэйсами)
Если в xml используются атрибуты с нэймспэйсами, их можно вытащить так:
Убедимся, что в списке нет неиспользуемых нэймспэйсов (xmlns:unused=”http://unused.ns”)
Создадим карту соответствия namespace:alias
Строим красивый XML и записываем в строку prettyXml
Готово. Такой xml не стыдно добавить в документацию или еще куда нибудь.
Откуда берется xml в котором нэймспэйсы не в корне?
XML, в котором нэймспэйсы дублируются и разбросаны по нодам получается при вставке элементов в существующий документ.
Например, в том же groovy это можно сделать так:
В groovy очень удобно парсить и менять xml.
Еще он должен хорошо справляться с огромными документами,
так как XmlSlurper и XmlParser основаны на SAX и используют мало памяти.