9
votes

Gestion des caractères d'échappement XML (E.G. citations) à l'aide de Jaxb Marshaller

J'ai besoin de sérialiser un objet XML Java à un fichier XML à l'aide du Marshaller JAXB (version 2.2 JAXB). Maintenant, dans l'objet XML, j'ai une balise contenant Valeur de chaîne forte> telle que:

"<"tagA>
**"<"YYYYY>done"<"/YYYYY>**
"<"/tagA>


0 commentaires

5 Réponses :


2
votes

1 commentaires

Merci pour votre réponse Blaise. Je vais explorer celui-ci à coup sûr car il semble intéressant. Cependant, j'ai trouvé une solution pour mon problème que je pose ci-dessous ..



10
votes

fait en définissant la propriété suivante pour le Marshaller JAXB:

marshaller.setProperty("jaxb.encoding", "Unicode");


3 commentaires

Pouvez-vous s'il vous plaît élaborer sur votre usage pour échapper au personnage. Je ne suis pas capable de le faire avec JUS la propriété définie sur Unicode.


Pour élaborer la même chose, je venais de définir la propriété suivante sur le Marshaller: Marshaller.seproperty ("Jaxb.encoding", "Unicode"); marshaller.seproperty (marshaller.jaxb_formatted_output, vrai); marshaller.setProperty (caractéristiquesCapepwherler.class.getName (), Nouveau CustomCharacterSescapeHandler ());


Ici, dans la troisième déclaration, comme vous pouvez le constater, j'avais créé une classe CustomCharacterSescapeHandler qui fait la manipulation des personnages d'échappement. Vous pouvez trouver son code facilement sur le net en recherchant «Comment remplacer la méthode d'échappement de CaractèreHandler». Au cas où vous auriez besoin du code, demandez-moi ..



1
votes

Selon ce que vous recherchez exactement, vous pouvez soit:

  • Désactiver le caractère échappatoire
  • ou utilisez CDATA String quel support peut être ajouté à JAXB avec juste un peu de configuration

0 commentaires

9
votes

Il y a un moyen plus simple. Première utilisation Séquence d'évacuation personnalisée: xxx pré>

puis le marshal à une chaîne comme mentionné ci-dessous p> xxx pré>

puis créer un objet de document de l'auteur mentionné ci-dessous p>

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource( new StringReader( writer.toString() ) );
Document doc = builder.parse( is );


3 commentaires

Le problème de cette approche est que vous ne pouvez pas construire l'application avec OpenJDK. com.sun.xml.internal.bind.marshaller.CharacterescapeHandler appartient à Sun JDk.


Vous pouvez utiliser com.sun.xml.bind.marshaller.charsterescapewherler


@ user2814648 com.sun.xml.bind.marshaller.charsterscapepapeHandler n'est pas sur la classe de classe. Au moins pas pour moi. Dans quelle bibliothèque est-ce?



3
votes

avec Jaxb Marshaller Si vous voulez un contrôle total sur lequel les caractères s'échapper (par exemple, "\ '"), vous devrez ajouter une propriété: xxx

et créer une nouvelle classe CustomCharacterSEcpeHandler xxx

espère que cela aide.


1 commentaires

Je pense que vous êtes manquant && isattval en c == '\' '.