2010-04-21 4 views
1

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 dans 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? J'ai essayé de changer le type d'attribut en xs: NMTOKEN, mais j'ai la même exception. Y a-t-il un autre type?

Je pense que je pourrais changer le codage des caractères, par exemple en utilisant la représentation HTML, comme <, mais que pourrait être difficile pour la comparaison de chaînes ...

Répondre

0

Vous devez échapper à des entités XML spéciales comme <, >, " avec &lt;, &gt;, &quote;

+0

Je pensais quelque chose comme ça, dans ma question j'ai dit "... la représentation HTML, comme <, ..." où vous voyez le "<" parce que j'ai oublié de cliquer sur le bouton "code" dans l'éditeur. – Segolas

3

Utiliser des références d'entité: remplacer < avec &lt; et > avec &gt etc. dans votre document XML. Votre analyseur XML traitera ensuite la conversion entre le caractère réel et sa référence d'entité. Autrement dit, dans votre code, vous obtenez le caractère < ou >.

+0

+1 - Exactement, un personnage nu '<' or '>' ou '"' dans une valeur d'attribut XML rend le XML malformé ... ou dans de rares cas, bien formé mais différent de ce que vous vouliez dire –

Questions connexes