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

XSL/XSLT/XPATH XML Discussion :

[XSLT] Saxon - conversion d'entité


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [XSLT] Saxon - conversion d'entité
    Bonjour à tous,

    J'utilise la librairie Saxon en Java afin de faire des transformations de fichier XML en utilisant des templates XSLT.

    Dans mes templates j'ai des entités du type: °

    Après transformation, ce caractère est transformé en °
    Je souhaiterais que cette transormation n'aie pas lieu.

    Ma méthode :

    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
    21
    22
    23
    24
    25
    public static void xsltRun(File xmlIn, File xmlOut, File xsltF) throws Exception {
    
            try {
    
                Processor proc = new Processor(false);
                XsltCompiler compile = proc.newXsltCompiler();
    
                StreamSource xslt = new StreamSource(xsltF);
                StreamSource source = new StreamSource(xmlIn);
    
                XsltExecutable xsltExe = compile.compile(xslt);
                net.sf.saxon.s9api.XsltTransformer trans = xsltExe.load();
                Document doc = DOMUtils.createDocument();
                DOMDestination dest = new DOMDestination(doc);
                trans.setSource(source);
                trans.setDestination(dest);
                trans.transform();
                DOMXMLFragment xmlFrag = new DOMXMLFragment(doc);
                xmlFrag.save(xmlOut);
    
            } catch (Exception e) {
                throw new Exception("ERROR During XSL Transformation", e);
            }
        }
    Merci par avance

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Comme ça ce n'est pas possible.

    Il faut se rappeler qu'en XML, ° ça veut dire ° et c'est fini.
    On pourrait imaginer (je ne sais pas si ça existe) une option du transformateur pour réécrire les ° sous forme de ° quand il écrit le XML.
    Mais si tu passes par une étape DOM, le transformateur n'y peut rien : on ne peut pas représenter les character references en DOM.

    Une solution serait d'écrire le XML non pas dans un fichier, mais dans une String, puis de faire un replaceAll("°", "°") ce qui devrait marcher dans la plupart des cas. Une solution plus complexe mais qui gère tous les cas, serait de transformer toi-même le fragment DOM en texte XML, de sorte que quand tu tombes sur un attribut ou un nœud texte qui contient °, tu le remplaces par °. Attention, ce n'est quand même pas complétement évident à faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Comme ça ce n'est pas possible.

    Il faut se rappeler qu'en XML, ° ça veut dire ° et c'est fini.
    On pourrait imaginer (je ne sais pas si ça existe) une option du transformateur pour réécrire les ° sous forme de ° quand il écrit le XML.
    Mais si tu passes par une étape DOM, le transformateur n'y peut rien : on ne peut pas représenter les character references en DOM.

    Une solution serait d'écrire le XML non pas dans un fichier, mais dans une String, puis de faire un replaceAll("°", "°") ce qui devrait marcher dans la plupart des cas. Une solution plus complexe mais qui gère tous les cas, serait de transformer toi-même le fragment DOM en texte XML, de sorte que quand tu tombes sur un attribut ou un nœud texte qui contient °, tu le remplaces par °. Attention, ce n'est quand même pas complétement évident à faire.
    J'ai le même problème pour une entité du type ° avec la déclaration suivante d'entité dans mon fichier xslt :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xsl:stylesheet [
    <!ENTITY % ISOEntities PUBLIC "ISO 8879-1986//ENTITIES ISO Character Entities 20030531//EN//XML" "/home/DTD/S1000D/ent/xml/ISOEntities"> %ISOEntities;
    ]>


    Le &deg; est converti en °

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Ben, oui.

    À la rigueur, il est possible en DOM de garder "entité référence nommée deg" plutôt que le transformer en °. Possible, mais absolument pas nécessaire et presque jamais fait. D'ailleurs c'est possible dans les nœuds texte, mais pas dans les attributs.

    Du coup, ça ne fait guère de différence avec le problème précédent. Tu peux à la rigueur chercher si le transformateur XSLT n'a pas une option pour ça (il y en a une pour ne pas étendre les références d'entité du document source, en général.)
    Mais je pense que tu n'aboutiras à rien et que si tu en as vraiment besoin, trouver ou programmer un sérializeur XML qui remplace ° par &deg; ou par &#x00B0; est ce qu'il te faut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/09/2006, 18h11
  2. [XSLT][saxon] Problème de génération de fichier texte
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 19/07/2006, 09h03
  3. [VB.Net]Conversion des entités XML
    Par azerty25 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 07h06
  4. [XSLT][Saxon]passage de paramètres à une template
    Par RB Greg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 12/05/2005, 16h29
  5. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14

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