Il semble que ce soit la dénormalisation de la sortie et l'inclusion du contexte de l'espace de nommage avec les nœuds qui ont réellement besoin du contexte de l'espace de nommage.
Par exemple, la page web pour cette question vient avec espace de noms CreativeCommons embarqué:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:thr="http://purl.org/syndication/thread/1.0">
<!-- snip -->
<creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/2.5/rdf</creativeCommons:license>
<!-- snip -->
</feed>
Lorsque vous la sortie du XML en utilisant ce script:
def root = new XmlParser().parseText("http://stackoverflow.com/feeds/question/227447".toURL().text)
println new XmlNodePrinter().print(root)
Il finit par déplacer l'espace de noms à la nœud de licence qui a besoin de cet espace de noms. Pas un gros problème dans ce cas car il n'y a qu'un seul nœud dans cet espace de noms. Si la plus grande partie du XML avait un espace de noms, cela gonflerait probablement un peu plus les choses.
<feed xmlns="http://www.w3.org/2005/Atom">
<!-- snip -->
<creativeCommons:license xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
http://www.creativecommons.org/licenses/by-nc/2.5/rdf
</creativeCommons:license>
<!-- snip -->
</feed>
Si vous voulez réellement les noeuds normalisés, vous auriez à faire quelques modifications à la XmlNodePrinter faire 2 passe à travers le XML, d'abord de rassembler tous les espaces de noms utilisés et 2 pour les sorties en haut plutôt que dans chaque nœud avec un espace de noms. Le code source groovy est en fait assez lisible et ne serait pas si difficile à modifier si vous en aviez réellement besoin.