Java, UnmarshallingException causée par l'attribut XML avec les caractères spéciaux:;! IE + oua - <^ èç ° § _> £ $% & / () = ~ ` '#;
-
30-09-2019 - |
Question
mon fichier xml a une balise avec un attribut « containsValue » qui contient les caractères « spéciaux » vous pouvez voir dans le sujet:
<original_msg_body id="msgBodySpecialCharsRule" containsValue=";ìè+òàù-<^èç°§_>!£$%&/()=?~`'#;" />
dans mon schéma xml l'attribut a xs: string:
<xs:attribute name="containsValue" type="xs:string" />
J'utilise cette valeur à l'intérieur d'un logiciel Java qui vérifie si cette valeur est contenue dans une autre chaîne.
mais j'obtiens toujours cette exception:
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: The value of attribute "containsValue" associated with an element type "original_msg_body" must not contain the '<' character.]
Comment puis-je résoudre? Je l'ai essayé de changer le type d'attribut à xs: NMTOKEN, ut je reçois la même exception. Y at-il autre type?
Je pense que je pourrais changer les encodage de caractères, par exemple en utilisant la représentation HTML, comme <, mais que ce qui pourrait être difficile pour la comparaison de chaînes ...
La solution
Vous devez échapper à des entités XML spéciales comme <
, >
, "
avec <
, >
, "e;
Autres conseils
Utiliser des références d'entité: remplacer <
avec <
et >
avec >
etc. dans votre document XML. Votre analyseur XML sera ensuite gérer la conversion entre le caractère réel et sa référence d'entité. C'est, dans votre code que vous obtenez le caractère <
réelle ou >
.