Question

Je suis une mise en œuvre subprotocol homebrew de XMPP, et je suis en utilisant la combinaison de Stax et JAXB pour l'analyse syntaxique / mesages marshalling. Et quand je marshall un message je me retrouve avec des tas de déclarations d'espace de noms unneded:

   <ns2:auth xmlns:ns2="urn:ietf:params:xml:ns:ilf-auth" 
   xmlns:ns4="ilf:iq:experiment:power" xmlns:ns3="ilf:iq:experiment:init" 
   xmlns:ns5="ilf:iq:experiment:values" xmlns:ns6="ilf:iq:experiment:result" 
   xmlns:ns7="ilf:iq:experiment:stop" xmlns:ns8="ilf:iq:experiment:end">
   compton@ilf</ns2:auth>

au lieu de:

   <ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>compton@ilf</ns:auth>

Y at-il moyen de transformer celui de?

Tous ces espaces de noms sont utilisés dans différents messages qui se rassemblèrent / unmarshalled par JAXB, mais chaque message utilise un espace de noms.

PS. Je ne suis pas un expert en XML s'il vous plaît ne pas me tempêter si je l'ai fait une erreur stupide;)

Était-ce utile?

La solution

La fonctionnalité que vous recherchez a été demandé comme une amélioration du suivi des problèmes JAXB Numéro 103 . L'amélioration a été refusée, puisque les auteurs JAXB trouvent trop cher pour traverser l'arborescence d'objets une fois de plus avant la sérialisation réelle commence à déterminer les espaces de noms sont effectivement nécessaires.

Bien plutôt pléthorique, les espaces de noms inutiles ne sont pas invalidantes le document XML. Si vous avez vraiment sauver les quelques octets et le coût de calcul supplémentaire est abordable, il devrait être assez facile d'écrire votre propre processeur XML / filtre, qui prend la sortie JAXB, analyse le document et écrit un nouveau document sans les définitions d'espace de noms inutilisés .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top