10
votes

Format XML avec JAXB pendant lamairie

Je veux formater un document XML pendant lamlame avec Jaxb. Lamarshal ressemble à: xxx

tandis que le marshaling on peut formater le code via: xxx

mais ce n'est pas possible pour le processus de non-maralal. .. Toute idée de la manière dont je peux formater la chaîne XML avec Jaxb pendant (ou après) processus de lamarshal?

BTW: J'ai lu des messages ici sur jolie imprimée, mais je veux le faire avec Jaxb!


5 commentaires

Est-ce que lamarshall n'entraîne-t-il pas une instance d'objet?


Ensuite, que voulez-vous formater?


"Mais je veux le faire avec Jaxb!" - Y a-t-il une bonne raison de "vouloir" cela de cette façon? Je suppose maintenant que vous voulez dire "format xml avec jaxb pendant le marshalling": - La production XML est là pour être transformée, on pourrait dire que c'est sa première raison d'existence;) et il y a 1000 possibilités de faire cela. Donc, transformez simplement le XML généré d'une manière que vous voulez.


Pourquoi cette question a-t-elle un point si elle est insensée?


À côté de cela ne fait pas de sens le réglage de la même propriété, comme ci-dessus vers le Mobilealshaller, une exception: javax.xml.bind.propertyException: Nom: jaxb.formatted.out Valeur: true (métro a été utilisé pour le test).


4 Réponses :


3
votes

Je pense qu'il n'y a pas de jolie imprimé pour le Mobilealshaller, car le résultat du Jaxb Mobilealshaller n'est pas un objet XML mais un objet Java. Si vous souhaitez imprimer joliment, l'objet non munablé résultant est mieux remplacer la méthode Tostring () de l'objet généré JAXB. (Ce sera une solution désordonnée depuis chaque fois que vous générez les classes de liaison JAX, vous aurez HAVETO introduire vous-même la méthode Tostring ().

hmmm ... J'espère que les futures versions de JAXB auront une solution à cette lacune, car il est important pour la journalisation, etc.


0 commentaires

43
votes

Il est logiquement insensé de formater le code XML tout en le minimisant?


1 commentaires

Cela semble raisonnable, mais on pourrait vouloir enregistrer le code XML sous forme de chaîne dans un fichier dans un environnement contrôlé.



0
votes

Un moyen de le faire, si vous insistez, est d'utiliser un transformateur XSLT, tel que Saxon's, qui prend en charge "Teeting", c'est-à-dire que vous transformez une source à deux objets de résultat. Je ne sais pas pourquoi vous appelez string # getBytes (); Vous devriez créer un stringreader et tirer de cela. Les deux destinations de votre "tee" seraient la "transformation d'identité" (la valeur par défaut si vous appelez TransformerFactory # NewTransformer ()) et l'autre serait JaxbreResult.


0 commentaires

25
votes

Si vous souhaitez enregistrer XML formaté correspondant au XML que vous venez de démarrer, vous pouvez simplement remarner l'objet NaMaRshaled Retour à XML, à l'aide de la propriété que vous avez spécifiée, c'est-à-dire.

/**
 * Marshall input object to a formatted XML String
 */
protected <T> String marshal(T input) throws JAXBException {
    StringWriter writer = new StringWriter();

    JAXBContext jc = JAXBContext.newInstance(input.getClass());
    Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(input, writer);
    return writer.toString();
}


0 commentaires