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 :

Transformer : encodage avec référence numérique [DOM]


Sujet :

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

  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Transformer : encodage avec référence numérique
    Bonjour,

    Je cherche à modifier un fichier xml par le DOM tel que le suivant :

    <?xml version="1.0" encoding="UTF-8"?>
    <servinfo>
    <title>Description</title>
    <ptxt>Pas d'information pour cette fonction &#xe0; v&#xe9;rifier.</ptxt>
    </servinfo>
    Pour ce faire, j'utilise l'API DOM pour générer un arbre DOM à partir du fichier, modifier cet arbre, puis recharger à partir de l'arbre le fichier.

    Code : 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
     
    DocumentBuilderFactory fabrique = (DocumentBuilderFactory) DfDocumentBuilderFactory.newInstance();
    fabrique.setExpandEntityReferences(false);
    DocumentBuilder constructeur = fabrique.newDocumentBuilder();
    FileInputStream fileReader = new FileInputStream(filePath);
    InputSource src = new InputSource(fileReader);
    Document document = constructeur.parse(src);
    fileReader.close();
     
    Source source = new DOMSource(document);
    Result resultat = new StreamResult(filePath);
     
    TransformerFactory transformerFab = TransformerFactory.newInstance();
    Transformer transformer = transformerFab.newTransformer();
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.VERSION, "1.0");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
     
    transformer.transform(source, resultat);
    Cependant, j'obtiens en sorti le fichier suivant :

    <?xml version="1.0" encoding="UTF-8"?>
    <servinfo>
    <title>Description</title>
    <ptxt>Pas d'information pour cette fonction à vérifier.</ptxt>
    </servinfo>
    Les accents ne sont plus sous forme de références numériques comme je le voulais, on a maintenant "à vérifier" au lieu de "&#xe0; v&#xe9;rifier". Comment puis je faire pour garder que les accents restent sous références numériques ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    la conversion de ces entités en caractères Unicode se fait automatiquement lors du parsing, conformément à la spécification XML, et il n'y a pas, à ma connaissance, moyen de désactiver cela.

    De toute façon, les entités caractères ne sont utilisées que pour faire apparaître des caractères qui ne sont pas compatibles avec l'encodage déclaré (attribut encoding). En l'occurrence, l'encodage déclaré dans ta source étant UTF-8, ils ne sont en principe même pas nécessaires dans ce cas de figure (à moins que l'encodage physique soit différent de l'encodage déclaré, ce qui est à proscrire !).

    Pourquoi veux-tu absolument conserver ces entités ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par GrandFather
    Pourquoi veux-tu absolument conserver ces entités ?
    J'en ai besoin car l'application qui lit ensuite ces fichiers xml ne supporte que ces entités caractères.

    Donc pas de moyen ? Je ne sais même pas comment retravailler simplement ensuite le fichier pour transformer tous les charactères spéciaux. Dès que je vais toucher à un parseur cela va refaire le même problème !

    HELP !!!!

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par tdaubign
    J'en ai besoin car l'application qui lit ensuite ces fichiers xml ne supporte que ces entités caractères.
    Ca voudrait dire qu'elle ne lit pas l'Unicode ? Eh ben, elle a dû être bien pensée cette application...

    Change la valeur de l'encodage souhaité dans le fichier de sortie, de telle façon à obliger le processeur XSLT à utiliser les entités caractères pour sérialiser les caractères incompatibles avec ce nouvel encodage. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transformer.setOutputProperty(OutputKeys.ENCODING, "ASCII");
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par GrandFather
    Change la valeur de l'encodage souhaité dans le fichier de sortie, de telle façon à obliger le processeur XSLT à utiliser les entités caractères pour sérialiser les caractères incompatibles avec ce nouvel encodage.
    Oui mais par contre il faut que mon prolog contienne utf-8 comme encodage ! Il faut que je le modifie à la mano ensuite ?

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par tdaubign
    Oui mais par contre il faut que mon prolog contienne utf-8 comme encodage ! Il faut que je le modifie à la mano ensuite ?
    Oui. Mais c'est vraiment du bricolage...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  7. #7
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci, la mort dans l'âme je vais faire cela...

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

Discussions similaires

  1. [XSLT] Problème de transformation XML avec un fichier xslt
    Par seb35 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/04/2006, 22h02
  2. Porblème d'encodage avec un EDI java sous Suse 9.3 pro
    Par HNT dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 12/11/2005, 12h32
  3. Encodage avec XML
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 25/10/2005, 10h48
  4. [XML][XSL][FOP] transformation xml avec fop
    Par Le Marlou dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 05/12/2003, 16h58

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