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 :

Xpath evaluate problème encodage


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut Xpath evaluate problème encodage
    Bonjour,

    Je n'ai pas beaucoup d'expérience en ce domaine c'est pourquoi je fais appel à votre aide.

    Je vais simplifier au plus la chose pour être bref:

    J'ai un fichier XML qui possède la structure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
       ...
       <variable>
          <value>France</value>
       </variable>
       <variable>
          <value>Grèce</value>
       </variable>
       ...
    </xml>

    Avec une classe Java, je veux obtenir les valeurs qui se trouvent entre les tags "value". Voilà ma méthode Java pour cela:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                    ...
                    final XPath xpath = XPATHFACTORY.newXPath();
    		String result = "";
    		final XPathExpression nodesXpath = xpath.compile(xpathQuery);
     
    		// Gets the element
    		final Element nd = 
    			(Element) nodesXpath.evaluate(doc, XPathConstants.NODE);
     
    		if (nd != null) {
    			result = nd.getTextContent();
    		}
                    ...

    Les valeurs obtenues sont les suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Value1: France
    Value2: Grèce

    Comment faire pour que la valeur "Grèce" soit correctement interprétée?

    J'ai déjà le fichier XML sous UTF-8 donc je ne vois pas d'où peut venir le problème...

    Merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par pjmorce Voir le message
    Comment faire pour que la valeur "Grèce" soit correctement interprétée?
    #1 - Comment t'y prends-tu pour charger le fichier XML en question ? Es-tu sûr que tu laisses le parseur XML auto-détecter l'encodage correctement ?
    Tu lui fournis un File, un InputStream ou un Reader (ou un byte[] ou une String...) ?

    Normalement il faut lui fournir des octets et pas des caractères. Donc, un File, un byte[] ou un InputStream.
    Pas un Reader ni une String.

    #2 - Il est tout-à-fait possible que cette valeur soit correctement interprétée, et que le problème soit au moment où tu veux l'afficher ailleurs. Vérifie si ce n'est pas ça. (Genre, au lieu d'afficher un truc qui est extrait de ton XML, affiche carrément une String avec des accents, genre "Grèce".)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Merci pour ta réponse.

    J'ai fais un debug et mon problème se trouve bien au moment du chargement de l'XML je pense car je sauvegarde le contenu du XML dans une String.

    Je vais voir comment faire pour obtenir mon Document XML à partir d'un inputstream...

    Citation Envoyé par thelvin Voir le message
    #1 - Comment t'y prends-tu pour charger le fichier XML en question ? Es-tu sûr que tu laisses le parseur XML auto-détecter l'encodage correctement ?
    Tu lui fournis un File, un InputStream ou un Reader (ou un byte[] ou une String...) ?

    Normalement il faut lui fournir des octets et pas des caractères. Donc, un File, un byte[] ou un InputStream.
    Pas un Reader ni une String.

    #2 - Il est tout-à-fait possible que cette valeur soit correctement interprétée, et que le problème soit au moment où tu veux l'afficher ailleurs. Vérifie si ce n'est pas ça. (Genre, au lieu d'afficher un truc qui est extrait de ton XML, affiche carrément une String avec des accents, genre "Grèce".)

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut Précisions du langage dans les balises CODE
    ReBonjour

    J'ai modifié mon code et maintenant mon objet Document est bien obtenu à partir d'un File.


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       final DocumentBuilder docBuilder = DocumentUtil.getNewDocumentBuilder();
       final Document doc = docBuilder.parse(new File(filename))



    Cependant, mon problème d'encodage persiste.

    Dans ma méthode je parcours le Document pour obtenir les différentes valeurs et à partir de ces valeurs je veux créer un XSL. Voici une partie du code simplifiée pour mieux comprendre:


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    final ByteArrayOutputStream myXmlOutputStream = new ByteArrayOutputStream();
     
    final XMLStreamWriter mywriter = XMLOutputFactory.newInstance().createXMLStreamWriter(xmlOutputStream);
     
    ...
     
     
    final String value = getValue(Element);
     
    mywriter.writeCharacters(name);
    mywriter.writeCharacters(value);
    mywriter.writeEndElement();
     
    ...
     
    java.io.OutputStream outputStream = new java.io.FileOutputStream ("d:/resultat.xslt");
    myXmlOutputStream.writeTo(outputStream);
    outputStream.close();


    En faisant "debug" la valeur des "value" obtenues est correcte (les charactères spéciaux sont bien affichés.
    Mais le XSL généré dans le fichier resultat.xslt n'est pas correct. Les charactères spéciaux n'apparaissent pas correctement...
    Exemple:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times">
    	<xsl:template match="/">
    		...
    		<VALUE1>France</VALUE1>
    		<VALUE2>France</VALUE2>
    		...
    	</xsl:template>
    </xsl:stylesheet>


    Une idée de comment corriger le problème?

    Merci

    Citation Envoyé par pjmorce Voir le message
    Merci pour ta réponse.

    J'ai fais un debug et mon problème se trouve bien au moment du chargement de l'XML je pense car je sauvegarde le contenu du XML dans une String.

    Je vais voir comment faire pour obtenir mon Document XML à partir d'un inputstream...

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hum. Je ne me suis jamais servi de XMLStreamWriter. Mais bon.

    Citation Envoyé par pjmorce Voir le message
    RMais le XSL généré dans le fichier resultat.xslt n'est pas correct. Les charactères spéciaux n'apparaissent pas correctement...
    En es-tu sûr ? Comment vérifies-tu ?

    - D'abord, ton exemple ne le montre pas : il ne contient pas de caractère spécial ni rien qui s'affiche mal.
    - Si ça se trouve, le fichier construit est très bien, c'est juste que toi tu l'ouvres en iso-8859-1 alors que c'est un fichier utf-8. Peux-tu vérifier ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Oui...

    Par contre, je me suis mal exprimé en écrivant. Les caractères accentués sont correctement affichés dans le fichier XSL généré mais pas les "<" et les ">" (dans le cas où la valeur du tag "value" contient des "<" et des ">").

    Par exemple, mon fichier XML source possède ceci:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
       ...
       <variable>
          <value>France</value>
       </variable>
       <variable>
          <value>Grèce</value>
       </variable>
       <variable>
          <value><xsl:variable name="Genre" select="client/nom"/></value>
       </variable>
       ...
    </xml>



    Voici l'aspect de mon XSL généré:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times">
    	<xsl:template match="/">
    		<root>
    			<VALUE1>France</VALUE1>
    			<VALUE2>Grèce</VALUE2>
    			<VALUE3>&lt;xsl:variable name="Pays" select="root/column_8"/&gt;</VALUE3>
    		</root>
    	</xsl:template>
    </xsl:stylesheet>



    Voilà. Les charactères spéciaux sont interprétés mais pas les "<" / ">"...

    Je ne sais pas quel est le problème...


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times">
    	<xsl:template match="/">
    		...
    		<VALUE1>France</VALUE1>
    		<VALUE2>France</VALUE2>
    		...
    	</xsl:template>
    </xsl:stylesheet>

    Citation Envoyé par thelvin Voir le message
    Hum. Je ne me suis jamais servi de XMLStreamWriter. Mais bon.



    En es-tu sûr ? Comment vérifies-tu ?

    - D'abord, ton exemple ne le montre pas : il ne contient pas de caractère spécial ni rien qui s'affiche mal.
    - Si ça se trouve, le fichier construit est très bien, c'est juste que toi tu l'ouvres en iso-8859-1 alors que c'est un fichier utf-8. Peux-tu vérifier ?

Discussions similaires

  1. Problème encodage de certains caractères
    Par marieR dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 14/12/2006, 15h55
  2. Réponses: 4
    Dernier message: 28/09/2006, 20h20
  3. [DOM] Problème encodage
    Par spilliaert dans le forum Format d'échange (XML, JSON...)
    Réponses: 19
    Dernier message: 05/06/2006, 16h26
  4. Probléme encodage caractéres spéciaux MYSQL
    Par FoxLeRenard dans le forum Installation
    Réponses: 1
    Dernier message: 20/02/2006, 12h10
  5. Réponses: 1
    Dernier message: 02/02/2006, 23h12

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