Comment ajouter un espace de noms XML (xmlns) lors de la sérialisation d'un objet XML
Je suis la sérialisation des Objets au format XML à l'aide de XStream.
Comment dois-je dire à XStream pour insérer un xmlns à la sortie XML de mon objet?
Comme un exemple, j'ai ce simple objet que je veux pour sérialiser:
@XStreamAlias(value="domain")
public class Domain
{
@XStreamAsAttribute
private String type;
private String os;
(...)
}
Comment puis-je obtenir exactement la sortie suivante avec XStream?
<domain type="kvm" xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
<os>linux</os>
</domain>
OriginalL'auteur ifischer | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
Sinon, ce cas d'utilisation peut être traitée assez facilement avec un JAXB de mise en œuvre (Métro, EclipseLink MOXy, Apache JaxMe, etc):
Domaine
paquet-info
Démo
Sortie
Pour Plus D'Informations
OriginalL'auteur
XStream ne supporte pas les espaces de noms mais les
StaxDriver
il utilise, ne. Vous devez définir les détails de votre espace de noms dans uneQNameMap
et le passer dans laStaxDriver
:De sortie:
Je ne pense pas qu'il y est un moyen d'obtenir votre sortie exacte. Vous pouvez essayer de retirer la
setDefaultPrefix
déclaration, mais qui va également supprimer qemu de la déclaration xmlns. Pourquoi avez-vous besoin de qemu dans votre sortie si vous n'allez pas l'utiliser pour le préfixe de vos éléments?parce que pas tous les nœuds enfants sont à l'aide de la qemu-espace de noms. Aussi, peut-être que je veux ajouter des espaces de noms XML plus tard. BTW, le XML généré doit être dans un modèle très précis, comme Il a été envoyé à Libvirt, qui est très stricte.
OriginalL'auteur
C'est un peu un hack, mais c'est rapide et facile: ajouter un champ à une classe appelée
xmlns
, et seulement de la non-nul lors de la sérialisation. Pour continuer votre exemple:Pour être complet, le réglage de
xmlns = null
devrait être dans unfinally
clause. À l'aide d'unPrintWriter
vous permet également d'insérer une déclaration XML au début de la sortie, si vous le souhaitez.OriginalL'auteur