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] fonction document() et chemins relatifs


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut [XSLT] fonction document() et chemins relatifs
    Bonjour j'ai une petite incompréhension dans une feuille de style XSL :

    J'ai un répertoire avec l'arborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./launcher.xml
    ./xml/data.xml
    ./xsl/style.xsl
    Le fichier ./launcher.xml contient le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <?xml-stylesheet href="xsl/style.xsl" type="text/xsl"?>
     
    <launcher>
    	<data>xml/data.xml</data>
    </launcher>
    Le fichier ./xml/data.xml contient le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0"?>
    <donnee>Voilà mes données</donnee>
    Dans le code XSL de ./xsl/style.xsl j'applique la fonction "document" à une chaine de caractère qui est soit chargée à partir du contenu d'une balise, soit écrite en dur dans le XSL :

    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"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:template match="/launcher">
    	<xsl:value-of select="document(data)/donnee"/>
    	<!-- resultat : Voilà mes données -->
     
    	<xsl:value-of select="document('xml/data.xml')/donnee"/>
    	<!-- resultat : (rien) -->
     
    	<xsl:value-of select="document('../xml/data.xml')/donnee"/>
    	<!-- resultat : Voilà mes données -->
    </xsl:template>
    Ce que je ne comprends pas c'est :
    Pourquoi dois-je spécifier des URL relatives différentes selon que la valeur soit écrite en dur ou chargée à partir d'une balise ?

    La question n'a rien de critique mais ce comportement m'intrigue fortement, alors si vous avez la réponse elle m'intéresse beaucoup

    Merci d'avance,
    Loceka.

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    La fonction document() a un second paramètre qui est optionnel.

    Il est dommage qu'il soit méconnu car il permet justement de déterminer par rapport à quoi le premier paramètre est relatif.

    Les moteurs XSLT ne sont pas tous scrupuleusement conformes sur cette affaire et c'est pourquoi je recommande vivement l'utilisation systématique de ce second paramètre !

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Merci bien mais je ne comprends toujours pas.

    J'ai essayé en jouant sur le deuxième paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:value-of select="document(data, .)/donnee"/>
    <!-- resultat : Voilà mes données -->
     
    <xsl:value-of select="document(data)/donnee"/>
    <!-- resultat : Voilà mes données -->
    Le code fonctionne avec : ., data, .., /, /launcher et /launcher/data, bref tous les "path" existants dans le XML.
    Quand je ne met pas de second paramètre, ça fonctionne aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:value-of select="document('xml/data.xml', .)/donnee"/>
    <!-- resultat : Voilà mes données -->
     
    <xsl:value-of select="document('xml/data.xml')/donnee"/>
    <!-- resultat : (rien) -->
    Le code fonctionne avec tous les "path" valides dans le XML.
    Dès que j'enlève ce second paramètre, je n'ai plus de valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:value-of select="document('../xml/data.xml', .)/donnee"/>
    <!-- resultat : (rien) -->
     
    <xsl:value-of select="document('../xml/data.xml')/donnee"/>
    <!-- resultat : Voilà mes données -->
    Le code ne fonctionne avec aucun second paramètre (dans tous les "path" valides, s'il y'a d'autres paramètres possible je n'ai pas trouvé : je n'ai trouvé aucun exemple se servant de ce paramètre).
    Dès que j'enlève le second paramètre, la valeur réapparaît.

    Alors :
    - Comment se fait-il que la chaîne de caractère contenue dans <data> ("xml/data.xml") fonctionne quand elle est chargée à partir de la balise mais pas quand elle est entrée directement, sauf si on met le second paramètre ?
    - Comment se fait-il que je ne puisse pas trouver de valeurs pour le second paramètre qui feraient que l'URL "../xml/data.xml" soit reconnue ?

    Ca me trouble un peu ce problème.

  4. #4
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Voici ce que je pense :

    • lorsqu'il y a un second paramètre qui porte sur le XML en entrée, le premier paramètre est interprété selon l'emplacement de ce XML.


    • lorsqu'il n'y a pas de second paramètre, c'est la position de la feuille de style qui est prise en compte.

    N'est-ce pas ce que vous constatez ?

  5. #5
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Oui, c'est en effet ce que je constate. Accessoirement, j'ai trouvé quel second paramètre ajouter pour que le chemin soit établi relativement au XSL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:value-of select="document('../xml/data.xml', document(''))/donnee"/>
    <!-- resultat : Voilà mes données -->
    Oui, c'est très moche !

    Bon, je pense que ton explication est la bonne, dommage qu'elle ne soit pas présente dans les docs...

    Merci à toi pour ta patience

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par Loceka Voir le message
    Bon, je pense que ton explication est la bonne, dommage qu'elle ne soit pas présente dans les docs...
    Si si il existe bien une documentation de référence traitant de ce point, mais sous une forme relativement indigeste...
    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

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

Discussions similaires

  1. [XSLT] Fonction document()
    Par Creuvard dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/04/2009, 13h42
  2. Réponses: 6
    Dernier message: 13/11/2007, 09h28
  3. [XSLT] pb fonction Document() avec variables
    Par Quentor dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 14/08/2007, 13h59
  4. Réponses: 3
    Dernier message: 16/05/2007, 16h57
  5. Réponses: 1
    Dernier message: 06/12/2006, 15h24

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