IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Probleme lecture fichier XML contenant le caractère '&'


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 58
    Points
    58
    Par défaut Probleme lecture fichier XML contenant le caractère '&'
    Bonjour

    Je traite un fichier XML de la manière suivante (je récupère le XML d'un WebService et je le mets dans une 'String') :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public DocXml(String asXML) throws ParserConfigurationException, SAXException, IOException{
            factory = DocumentBuilderFactory.newInstance();
            builder = factory.newDocumentBuilder();
            document = (Document)builder.parse(new ByteArrayInputStream(asXML.getBytes("ISO_8859_15")));
        }

    Tout est OK mais je rencontre un souci si l'une des valeurs d'un tag de mon fichier XML contient le caractère '&' (c'est-à-dire le code '&') : la valeur récupérée n'est pas complète (en fait la récupération de la valeur s'arrête au caractère '&'...)

    Est-ce que quelqu'un a déjà rencontré ce problème ?

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 561
    Points : 21 624
    Points
    21 624
    Par défaut
    Donne un exemple, ce sera plus clair.

    Mais moi j'ai déjà vu ce problème justement quand ce n'est pas un & mais plutôt un &referencedentiteinconnue; à l'intérieur d'un attribut.

    Dans ces cas-là, si le document est quand même bien formé et que la validation n'a pas été demandée, le parseur tombe sur une référence d'entité qu'il ne connaît pas et dont il ne peut pas inventer le contenu. Il fait donc comme si c'était pas là. Pour solutionner ça, il n'y a pas des masses de solutions : il faut lui fournir la DTD qui déclare cette entité. Genre la garder avec l'appli et dire au parseur de la prendre en compte pour parser ces documents.

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'ai rencontré ce problème récemment, en utilisant un parseur DOM.

    Voici comment le parseur "voit" un noeud XML contenant une chaîne de caractère, par exemple :

    sera interprété de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -"noeud" (Element)
       -"texte" (Text)
    Mais, voici ce qui arrive dès qu'un caractère spécial se faufile dans la chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <noeud>adresse&param1&param2</noeud>
    donne l'arbre suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    -"noeud" (Element)
       -"adresse" (Text)
       -code du caractère '&' (EntityReference)
       -"param1" (Text)
       -code du caractère '&' (EntityReference)
       -"param2" (Text)
    Donc, si tu veux récupérer la chaîne entière, tu dois boucler sur tous les enfants de l'élément en question et les concaténer.
    Pour les noeuds Text, récupère la chaîne telle quelle.
    Pour les noeuds EntityReference, la chaîne retournée est de type "#123" qui représente le code du caractère en nombre entier. Il faut retrouver le caractère de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (char)Integer.parseInt(code.substring(1))
    Voilà tout!

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 561
    Points : 21 624
    Points
    21 624
    Par défaut
    Citation Envoyé par DavLink Voir le message
    J'ai rencontré ce problème récemment, en utilisant un parseur DOM.
    Pour ma culture personnelle, quel parseur, au juste ?
    En voyant ça, les miens ont plutôt tendance à faire une exception "XML mal formé, vous êtes le maillon faible au revoir" et mon document n'est pas parsé.

Discussions similaires

  1. Lecture fichier CSV contenant des caractères accentués
    Par enicnath dans le forum Général Python
    Réponses: 25
    Dernier message: 24/03/2015, 12h10
  2. Réponses: 6
    Dernier message: 25/10/2012, 18h31
  3. probleme avec lecture fichier XML
    Par aztec dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/10/2010, 10h51
  4. Probleme lecture Fichier XML à partir table MySQM
    Par inzagi dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 20/07/2007, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo