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 :

xsl:for-each avec un parametre pour select


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut xsl:for-each avec un parametre pour select
    Bonjour,

    J'utilise le XSL suivant pour générer des classes java :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?xml version="1.0"?>
    <xsl:stylesheet version="2.0" 
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
     
    	<xsl:output method="text" name="text"/>
     
    	<xsl:template match="/">
    		<xsl:call-template name="MakeComboModelClass"/>
    	</xsl:template>
     
    	<xsl:template name="MakeComboModelClass">
    		<xsl:param name="name"/>
    		<xsl:param name="dir"/>
    		<xsl:param name="xpath"/>
    		<xsl:param name="package"/>
    		<xsl:param name="package_dir"/>
    		<xsl:result-document href="file:///{$dir}/src/{$package_dir}/{$name}ComboModel.java" format="text">
    	    <xsl:text>package </xsl:text><xsl:value-of select="$package"/><xsl:text>;
     
    import javax.swing.DefaultComboBoxModel;
     
    public class </xsl:text><xsl:value-of select="$name"/><xsl:text>ComboModel extends DefaultComboBoxModel
    {
    	public </xsl:text><xsl:value-of select="$name"/><xsl:text>ComboModel()
    	{
    		super( new Object[]{</xsl:text><xsl:variable name="seq"><xsl:for-each select="document(concat('../data/', $name, '.xml'))"><xsl:for-each select="$xpath">
    			<xsl:sequence select="concat('&quot;', ., '&quot;')"/>
    		</xsl:for-each></xsl:for-each></xsl:variable>
    			<xsl:value-of select="replace($seq,' ',',')"/><xsl:text>} );
    	}
    }</xsl:text>
    		</xsl:result-document>
    	</xsl:template>
     
    </xsl:stylesheet>
    Mon problème est sur la balise suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select="$xpath">
    la valeur de xpath n'est pas prise en compte par le for-each, en revanche si je la remplace directement par sa valeur en faisant par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select="/a/b/@c">
    ca fonctionne.

    J'ai vérifié la valeur de xpath que je récupère et c'est bien ce que je veux donc pas de problème de ce côté là.

    Quelqu'un aurait-il une explication et/ou une solution ?

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    sans doute du a la facon dont tu declare le parametre
    si tu veux le node-set resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="xpath" select="//truc"/>
    c'est ce que tu dois faire et ton xpath n'est pas encore valable a cet endroit

    si tu veux la chaine xpath
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="xpath" select="string('//truc')"/>
    mais le probleme dans le second cas c'est que le select te reclameras un node set de toute facon donc inutilisable en definitive.

  3. #3
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Effectivement j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:with-param name="xpath" select="//truc"/>
    pour déclarer mon paramètre.

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:with-param name="xpath" select="string('//truc')"/>
    je viens d'essayer et cela ne fonctionne pas non plus.

    Comment puis-je faire autrement alors ? Une idée ?

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par arnog
    je viens d'essayer et cela ne fonctionne pas non plus.

    Comment puis-je faire autrement alors ? Une idée ?
    je sais
    Citation Envoyé par Erwy
    mais le probleme dans le second cas c'est que le select te reclameras un node set de toute facon donc inutilisable en definitive.
    changer ta conception pour recuperer un node set,au pire creer un call-template qui en analysant une chaine en deduit un node-set,faisable dans certaines limites mais long

  5. #5
    Expert éminent
    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
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    si tu utilises SAXON (ce qui doit être semble-t-il le cas), tu peux utiliser la fonction evaluate() définie ici :
    http://www.saxonica.com/documentatio...mentation.html
    Prévue à l'origine pour être intégrée à XPath 2.0, cette fonction n'a finalement pas été retenue à cause des problèmes de performances qu'elle pose. Elle n'existe donc qu'à l'état d'extension dans certains processeurs/parseurs

  6. #6
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Effectivement j'utilise saxon, je vais essayer avec la fonction evaluate().

  7. #7
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci bien, ca fonctionne avec la fonction evaluate().

    Ca donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select="saxon:evaluate($xpath)" xmlns:saxon="http://saxon.sf.net/">

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 142
    Points : 53
    Points
    53
    Par défaut
    je reprend le sujet pour une petite précision :

    Quelle autre solution existe quand saxon:evaluate ne marche pas ?

    Je suppose que saxon marche quand on est en SAX or je suis en DOM.

    merci

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

Discussions similaires

  1. XSL pour PDF( xsl:for-each imbriqués)
    Par Gaspard22 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 24/04/2014, 14h23
  2. [XSLT] XSLT sort dans un for-each avec select sur un param
    Par tralloc dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 23/11/2012, 10h06
  3. [XSL] For each avec variables imbriquées
    Par Wells dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/05/2008, 20h28
  4. for-each avec select dans un node-set
    Par krapno dans le forum XSL/XSLT/XPATH
    Réponses: 24
    Dernier message: 13/07/2007, 17h48
  5. [XSLT] Croiser plusieurs xsl:for-each avec deux documents XML
    Par strat0 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/06/2007, 17h10

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