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] Importer un fichier xml (i18n) dans un fichier xsl [Débutant(e)]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut [XSLT] Importer un fichier xml (i18n) dans un fichier xsl
    bonjour,

    voici mon soucis:
    J'applique une transformation xslt à un fichier xml.
    Dans le fichier xsl, j'aimerais importer (appeller) un autre xml qui contient la traduction. (genre <error_text>veuillez mettre votre login</error_text>)

    Le problème c'est que je n'arrive pas à importer ce fichier dans le fichier xsl
    Comment faut il faire?

    Aussi y'aurait il une syntaxe particulière pour utiliser la valeur du noeud error_text du xml importé?
    ou un <xsl:value-of select="error_text" /> suffit?


    j'ai essayé l'exemple de haypo:
    http://www.developpez.net/forums/sho...59&postcount=5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:template xmlns:xi="http://www.w3.org/2001/XInclude" match="xi:include">  <!-- Get a reference to the external file's root node -->  <xsl:variable name="external_doc" select="document(@href)" />   <!-- Process the external file's document element -->  <xsl:apply-templates select="$external_doc/*" /> </xsl:template>
    en mettant à la place de select="document(@href)";
    select="document(http://monsite/monxml.xml)" ou bien select="http://monsite/monxml.xml"
    mais ça ne marche pas...vous pouvez m'aidez?
    Merci.

  2. #2
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    j'ai trouvé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="document('http://monsite/monxml.xml')//error_text"/>
    mais n'est-ce pas trop lourd d'appeller à chaque fois http://monsite/monxml.xml à chaque fois que j'ai besoin d'une variable?

    Y'aurait-il un moyen de l'appeller qu'une seule fois tout en étant libre d'utiliser les noeuds de ce fichier xml importé ou bien celui à qui j'applique la transformation?
    merci.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    savez comment je pourrais recupérer l'url de la feuille de style xsl $url_current?
    en gros:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="document('$url_current../../monxml.xml')//error_text"/>
    merci.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    personne n'a d'idée sur comment importer du xml dans du xsl en une fois et non pas sur chaque noeud?

  5. #5
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    et pourquoi tu n'utilises pas les includes pour résoudres ton problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE students[
    <!ENTITY source1 SYSTEM "student1.xml">
    <!ENTITY source2 SYSTEM "student2.xml">
    <!ENTITY source3 SYSTEM "student3.xml">
    ]>
     
    <students>
    &source1;
    &source3;
    &source2;
    </students>

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tu peux toujours faire une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="messages" select="document('http://site/xml.xml')/"/>


    ensuite, tu as juste à utiliser $messages/... pour avoir ton message
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    @fraoustin: Si j'ai bien compris ta syntaxe, je ne cherche pas à fusionner des xml.
    @Swoög: je testerai demain mais ta syntaxe à l'air d'être exactement ce que je recherche.

    concernant la fonction document(), je n'ai plus besoin de savoir l'url de la feuille xsl car cette fonction gère le chemin relatif...j'avais surement un problème de cache.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    merci Swoög ça marche nikel.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    je remonte ce post car j'ai encore un petit de syntaxe pour récupérer dynamiquement les erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="i18n" select="document(concat($location,'languages/',$lang,'/Errors_Succes_Msg.xml'))/i18n_text"/>
    qui ressemble à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <i18n_text>
    	<errors>
    		<id_1>erreur 1 blabla</id_1>
    	...
    	</errors>
    	<succes>
    	...
    	</succes>
    </i18n_text>
    comment récupérer l'erreur id_1 dynamiquement?
    j'ai essayé plusieurs syntaxes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="succes_text" select="concat($i18n,'/succes/id_',root/errors/error/error_id)" />
    mais ça concatène toutes mes chaines d'erreur et de succes et rajoute /succes/id_0_1 à la fin


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name="error_id" select="root/errors/error/error_id" />
    <xsl:variable name="succes_text" select="$i18n/succes/id_$error_id" />
    là ça plante...
    Comment faire?
    Merci
    Cassy.

  10. #10
    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,

    XSLT ne supporte pas les expressions XPath dynamiques. Il faut donc passer par des astuces pour rendre "paramétrable" une expression XPath.

    Une possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="succes_text" select="$i18n/succes/*[name() = concat('id_', $error_id)]" />
    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

  11. #11
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 68
    Points
    68
    Par défaut
    oula je pouvais chercher encore.

    MERCI!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2008, 13h38
  2. Réponses: 1
    Dernier message: 22/04/2008, 11h24
  3. Stoquer dans un fichier XML ou dans une base de données ?
    Par ludovic tambour dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 15/11/2007, 11h02
  4. [DOM XML] Ecrire dans un fichier XML comme dans un TXT
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/09/2007, 22h55
  5. Réponses: 3
    Dernier message: 06/08/2007, 03h44

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