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 :

Interpréter un attribut comme un chemin et non une valeur


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Interpréter un attribut comme un chemin et non une valeur
    Bonjour,

    Je débute dans le langage XSL et je veux transformer un code XML en fichier csv.
    J'ai un soucis sur un type de données que je n'arrive pas à traiter :

    Pour une occurence donnée, la balise tag que je souhaite récupérer ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tag>Concepts communs</tag>
    Sauf que parfois elle ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tag reference="../../../interaction/tags/tag"/>
    Autrement dit, dans ce cas là je ne veux pas récupérer la valeur mais le chemin en question pour aller chercher la valeur correspondante.

    J'ai tenté quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:choose>
    	<xsl:when test="@reference">
    	        <xsl:variable name="chemin" select="@reference"/>
    	        <xsl:value-of select="$chemin"/><xsl:value-of select="$delim"/>	
    	</xsl:when>
    	<xsl:otherwise>
    		<xsl:value-of select="."/><xsl:value-of select="$delim"/>
    	</xsl:otherwise>
    </xsl:choose>
    Mais en réponse j'obtiens :

    Concepts communs
    ../../../interaction/tags/tag

    et non :
    Concepts communs
    Concepts communs


    J'espère que je suis clair dans mes explications, n'hésitez pas à me demander des précisions si nécessaire.

    Merci d'avance,
    Yoann

  2. #2
    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
    Il n'est pas possible d'évaluer dynamiquement du XPath en XSL (1.0 ou 2.0).

    Par contre la "librairie" EXSLT te propose apparement une fonction dyn:evaluate() qui le permet.
    Si ton parseur XSL prend en charge EXSLT, tu peux passer par là.
    Sinon c'est mort (ou presque, tu peux toujours parser toi-même ton expression dans un template mais c'est fastidieux).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Merci pour cette explication.

    J'utilise le logiciel SAS pour réaliser la transformation du fichier XML à partir de la procédure XSL :
    "To transform the XML document, PROC XSL uses the Saxon-EE version 9.3 software package from Saxonica, which is a collection of tools for processing XML documents. The XSLT processor implements the XSLT 2.0 standard."
    Je en sais pas si ça prend en charge EXSLT mais mes 1ers tests ne sont pas concluant en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <xsl:stylesheet version="2.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csv="csv:csv" xmlns:dyn="http://exslt.org/dynamic" extension-element-prefixes="dyn">
        <xsl:output method="text" encoding="UTF-8"/>
        <xsl:strip-space elements="*"/>
    	<xsl:import href="dyn.xsl" />
    Je continue à chercher.

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Saxon a son extension evaluate(). Dans la balise stylesheet, déclarez le saxon préfixe, comme ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:csv="csv:csv"
        xmlns:saxon="http://saxon.sf.net/"
        exclude-result-prefixes="saxon"
    >
    Puis l'evaluation se fait comma ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:choose>
        <xsl:when test="@reference">
            <xsl:variable name="chemin" select="@reference"/>
            <xsl:value-of select="saxon:evaluate($chemin)"/>
            <xsl:value-of select="$delim"/>	
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="."/>
            <xsl:value-of select="$delim"/>
        </xsl:otherwise>
    </xsl:choose>

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Ca fonctionne !!! Super.

    Merci beaucoup pour votre aide !!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/06/2006, 14h15
  2. Créer un message d'alerte avec comme solution oui ou non
    Par La_Bande_A_Zozo dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/05/2006, 14h43
  3. Plus court chemin - graphe NON orienté et pondéré
    Par Nicodemus dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/03/2006, 15h32
  4. [xslt] passer le nom d'un attribut comme param
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/11/2005, 11h03

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