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 :

Problème pour "parser" un fichier XML avec accents [DOM4J]


Sujet :

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

  1. #1
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut Problème pour "parser" un fichier XML avec accents
    Bonjour,

    Je lis un fichier XML pour remplir les champs de mon interface graphique.
    Voici un bout de mon XML :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <info>
    <type>Cliché</type>
    [...pleins d'autres balises ...]
    </info>

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public String getType() { 
    		Node noeud = racine.selectSingleNode("child::*[local-name(.)='info']/child::*[local-name(.)='type']");
    		if(noeud == null) {
    			return "";
    		} else {
    			return noeud.valueOf("normalize-space(.)");
    		}
    	}
    Mon problème est que le nœud type contient la valeur "cliché".
    Mais dans le champ texte de mon interface ou quand je fais un System.out.println(noeud.valueOf("normalize-space(.)")); , j'obtiens un "Cliché", c'est à dire que l'accent ne passe pas.

    Quelqu'un connaît-il une autre méthode pour avoir la valeur d'un nœud XML ou voit ce qui ne va pas dans mon code ?
    Merci à ceux qui réfléchiront sur mon problème.

  2. #2
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut
    Bon, ben j'ai aussi essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    else{
        String leg = noeud.asXML();
        int lg = leg.length();
        String essai = leg.substring(54, lg-7);
    }
    Mais ça donne aussi essai = "Cliché"
    NB : leg = <type xmlns="http://www.culture.gouv.fr/ns/dapa/1.0">Cliché</type> d'où le substring...

    Je suis preneuse de toute idée pour résoudre mon problème !

  3. #3
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut
    Bon, je me rend compte que c'est dès la lecture des données de mon fichier XML que j'ai des problèmes avec les accents.
    Petite précision : mon fichier XML est encodé en UTF-8.

    Voici mon code :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    File fiche= new File("toto.xml");
    	if(fiche.exists()) {//Si le fichier existe bien :
    		String contenu ="";
    		System.out.println(fiche + " est présent.");
    			
    		// problème des xmlns vide : ça plante si j'enlève cette partie
    		try {
    			FileInputStream fis = new FileInputStream(fiche);
    			BufferedReader lecture = new BufferedReader(new InputStreamReader(fis));
    			String ligne = "";
    			while ((ligne = lecture.readLine()) != null) {
    				contenu+=ligne;
    				}
    			System.out.println("contenu 1 = "+contenu);
    			contenu = contenu.replaceAll("xmlns=\"\"","");
    			} catch(Exception e){
    				e.printStackTrace();
    			}
    			
    			try {
    			// on charge le document
    			document = DocumentHelper.parseText(contenu);
    			racine = document.getRootElement();
    			document.removeProcessingInstruction("xml-stylesheet");
    			} catch (DocumentException e){
    				e.printStackTrace();
    			}	
    		} else {
    			System.out.println("fichier XML introuvable");
    			createXML(fiche); //Si le fichier n'existe pas, je le crée, mais là n'est pas le problème
    		}

    En fait, j'ai mon problème d'accent dès la variable contenu (Cf ligne en rouge). J'obtiens bien mon fichier XML, mais j'ai "Cliché" au lieu de "Cliché"

    Si quelqu'un voit d'où vient le problème, merci de m'aider, car je suis à court d'idées...

  4. #4
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut
    Bon, j'ai aussi essayé de mettre mon fichier XML en ISO-8859-1 au lieu de l'UTF-8, mais ça me donne toujours des caractères bizarres pour les accents.
    En faite, je me rend compte que c'est dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = lecture.readLine()
    (voir premier post pour le code complet)
    que les accents sont changés.
    J'ai déjà lu des problèmes similaires (qui étaient dus à UTF-8 / ISO-8859-1) dans d'autres posts, mais personne avec le même code. J'ai pas toujours tout compris aux explications données...

    Je me suis aussi rendu compte que InputStreamReader pouvait prendre en paramètre l'encodage.

    Mais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BufferedReader lecture = new BufferedReader( new InputStreamReader(
    					    new FileInputStream(fiche),"ISO-8859-1"));
    ne fonctionne pas pour mon fichier XML (qu'il soit encodé en UTF-8 ou ISO-8859-1), tandis que si j'utilise exactement la même fonction pour lire un fichier texte accentué, il n'y a pas de problèmes...
    Bref, SVP

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Points : 39
    Points
    39
    Par défaut
    Moi je n'ai aucun problème à parser un document XML avec des accents !
    Pour être précis, en fait je pars d'un XML sans accents puis je modifie ce doc XML en y incluant des noeud texte avec accents. Au final j'ai un document XML avec des accents. Par contre, la transformation avec une feuille XSL de ce document plante....a cause des accents présent dans le XML.

    L'instruction pour parser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File XMLFile = new File(XMLMailFilename);
    		SAXReader saxReader = new SAXReader();
    		Document document = saxReader.read(XMLFile);
    		document.setXMLEncoding("UTF-8");


  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Points : 39
    Points
    39
    Par défaut
    Je suis en train de travailler avec les accents. J'arrive à modifier mon document XML et à le transfomer avec XSLT. Jusqu'ici, j'avais un problème d'accent avec la langue française : dans le mail envoyé, je lis sous outlook un caractère bizarre à la place de l'accent. Je me dis, "Zut, dans la chaîne de traitement Java, j'ai du oublier de préciser un encodage en UTF-8". J'essaie de setter en UTF-8 de partout : au niveau de la lecture / ecriture du fichier XML, au niveau de l'envoi du mail avec JavaMail, au niveau du transformer XSL, au niveau de la réception des paramètres avec JSP/Servlet, etc.
    Et là parfait, dans mon mail, l'accent français est bien converti .
    Mais maintenant, je cherche à remplir le formulaire Web avec du russe !
    Et là c'est la cata ... tout du chinois avec des "?" dans le mail.
    Autrement dit, j'ai un problème d'encodage.
    Je dois faire cette appli dans 14 langues : entre autres : russe, polognais, hongrois. Ce sont des langues horrible à traiter.
    Faut-il passer en UTF16 ? ... il me semble que cet encodage n'est que pour le chinois non ? (ouf je n'ai pas besoin de supporter cette langue)

  7. #7
    Expert éminent

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Points : 8 107
    Points
    8 107
    Par défaut
    Citation Envoyé par kroax Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		document.setXMLEncoding("UTF-8");
    Merci kroax pour cette fonction (qui n'est valable qu'avec la version 1.6 de dom4j, j'utilisais la 1.5...) ! Bon, pour que mon fichier fonctionne, je mets un "ISO-8859-1", mais c'est pareil...
    Pour info, je n'ai pas modifié mon code du post du 23/11/2007 à 10h02, mais c'est dans le else, quand je fais appel à createXML() que j'ai modifié mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void createXML(File fiche) {
    			try {
    						
    			document = DocumentHelper.createDocument();
    			document.setXMLEncoding("ISO-8859-1");
    			
    	        racine = document.addElement( "figure","http://www.culture.gouv.fr/ns/dapa/1.0");        racine.addAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");            racine.addAttribute("xsi:schemaLocation","http://www.opengis.net/gml  gml.xsd       http://www.culture.gouv.fr/ns/dapa/1.0  ../../../../schema/sdapa-adfi.xsd");
    	        racine.addAttribute("id",stringXML(nomSimple));
    	        racine.addAttribute("uri",stringXML(nomOriginal));
    			} catch (Exception e) {				
    				e.printStackTrace();
    			}
    	}
    Va savoir pourquoi, mon fichier XML est crée avec l'encodage UTF-8, mais je le lis et j'écris dedans sous Java avec ISO-8859-1 et cela marche parfaitement ! Les mystères de l'informatique sont impénétrables...

    [EDIT] Je laisse ce post non résolu pour le problème de kroak, mais si tu veux créer un autre post ou que ton problème est résolu, préviens-moi ! [/EDIT]

    [EDIT n°2 : ] J'ai vu que kroak avait posté son problème dans une autre rubrique du forum => Je mets le tag "Résolu" [/EDIT n°2]

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 110
    Points : 39
    Points
    39
    Par défaut
    kroak ? Kroax ! ou Maitre !
    Bon ca y est j'y suis arrivé !!!
    J'ai trouvé les 2 erreurs qui empêchaient d'envoyer mon mail dans les 14 langues !
    Voici les correctifs apportés :

    1) Au niveau de la JSP, l'encodage du formulaire en UTF-8 n'était pas précisé...j'ai du donc rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    Dans le <head> de la page JSP.

    2) Le fichier généré était de type "text/plain". Ceci ne marche pas ! J'ai dû générer un mail au format HTML qui prend très bien en charge l'UTF-8 en specifier dans la construction du mail un "addheaderline" où je précise un contenu de type "text/html". Dorénavant ma XSL transforme du XML en HTML.

    Le résultat sous Outlook est nickel !

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour supprimer attribut dans un fichier XML
    Par Jb_One73 dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/02/2015, 10h08
  2. Problème pour l'ouverture d'un fichier XML
    Par Kutoh dans le forum Powerpoint
    Réponses: 5
    Dernier message: 31/07/2013, 17h49
  3. Parser un fichier XML avec accent
    Par Enthau dans le forum Général Python
    Réponses: 7
    Dernier message: 17/09/2012, 23h40

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