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 Condition en fonction d'un attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut XSL Condition en fonction d'un attribut
    Bonjour,

    je cherche à traiter certaines données en fonction d'un attribut.

    j'ai mon fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <MESSAGE>
    <CHAMP10 NOM="Dupont" PRENOM="toto"/>
      <CHAMP20 AGE="33"/>
    </MESSAGE>
    <MESSAGE>
    <CHAMP10 NOM="Durand" PRENOM="tata"/>
      <CHAMP20 AGE="35"/>
    </MESSAGE>
    Je veux selectionner l'age uniquement de ceux dont le nom est Dupont.
    J'ai essayé des tas de choses diffentes mais je bloque, je débute avec xsl.
    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    En XPath ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //MESSAGE[CHAMP10/@NOM='Dupont']/CHAMP20/@AGE

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    Merci pour la réponse.

    Donc si je veux l'intégrer dans une feuille xsl, ca donnerait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="/">
    <xsl:for-each select="FILE/MESSAGE">
    <xsl:value-of select="MESSAGE[CHAMP10/@NOM='Dupont']/CHAMP20/@AGE"/>
    </xsl:for-each>	
     </xsl:template>
    A priori ca ne doit pas être ca car ca ne me sort rien.
    Désolé, mais comme je le disais, je débute, pas évident !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="/">
    <xsl:for-each select="FILE/MESSAGE[CHAMP10/@NOM='Dupont']">
    <xsl:value-of select="CHAMP20/@AGE"/>
    </xsl:for-each>
    </xsl:template>

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    Ok, seulement si mon fichier xml a plusieurs Dupont, il ne me sort qu'une donnée.
    Si mon fichier xml est :
    <MESSAGE>
    <CHAMP10 NOM="Dupont" PRENOM="toto"/>
    <CHAMP20 AGE="33"/>
    </MESSAGE>
    <MESSAGE>
    <CHAMP10 NOM="Durand" PRENOM="tata"/>
    <CHAMP20 AGE="35"/>
    </MESSAGE>
    <MESSAGE>
    <CHAMP10 NOM="Dupont" PRENOM="titi"/>
    <CHAMP20 AGE="44"/>

    Je n'ai que 33.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Avec ça en xml source et le xsl du dessus j'ai 33 et 44 chez moi.
    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
    <?xml version="1.0" ?>
    <FILE>
    <MESSAGE>
    <CHAMP10 NOM="Dupont" PRENOM="toto"/>
    <CHAMP20 AGE="33"/>
    </MESSAGE>
    <MESSAGE>
    <CHAMP10 NOM="Durand" PRENOM="tata"/>
    <CHAMP20 AGE="35"/>
    </MESSAGE>
    <MESSAGE>
    <CHAMP10 NOM="Dupont" PRENOM="titi"/>
    <CHAMP20 AGE="44"/>
    </MESSAGE>
    </FILE>

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    Je vais vérifier, demain, mon script perl de lancement, qui lui même comporte des conditions, merci pour les infos.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    Bonjour,
    j'ai bien vérifié mon script perl, apparament pas de problème, je poste donc mon code xml et xsl avec lequel je n'obtiens que la dernière valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="text"/>
     
    <xsl:template match="/"> 
    <xsl:for-each select="FILE/MESSAGE[CHAMP10/@NOM='Dupont']"> 
    <xsl:value-of select="CHAMP20/@AGE"/>
    </xsl:for-each> 
    </xsl:template>
     
    </xsl:stylesheet>
    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
    <?xml version="1.0" ?> 
    <FILE> 
    <MESSAGE> 
    <CHAMP10 NOM="Dupont" PRENOM="toto"/> 
    <CHAMP20 AGE="33"/> 
    </MESSAGE> 
    <MESSAGE> 
    <CHAMP10 NOM="Durand" PRENOM="tata"/> 
    <CHAMP20 AGE="35"/> 
    </MESSAGE> 
    <MESSAGE> 
    <CHAMP10 NOM="Dupont" PRENOM="titi"/> 
    <CHAMP20 AGE="44"/> 
    </MESSAGE> 
    </FILE>
    la valeur obtenue est 44 et non 33 et 44.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Je fais mes test avec msxml comme processeur xslt et j'ai bien 33 et 44.
    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="//MESSAGE[CHAMP10/@NOM='Dupont']">

  10. #10
    Membre émérite
    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
    Par défaut
    chez moi avec xalan cela fonctionne nickel aussi

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    J'ai essayé et je n'obtiens aucune réponse. J'utilise XSLT avec un script perl dont voici un extrait, je l'utilise pour d'autres fichier xml et je n'ai pas de soucis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $parser_202->transform($entree);			#Parse le fichier en entree
    $nom_fichier = $rep_sortie."202.txt";
    open (FICHIER,">$nom_fichier");		#Cree un fichier en sortie 
    print FICHIER ($parser_202->toString);		#Ecris le fichier de sortie
    close FICHIER;
    Je vais continuer de tester plusieurs manières d'utiliser le for each.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Par défaut
    Je l'ai testé avec XML SPY et ca marche effectivement.
    Je pense qu'il doit y avoir un problème au niveau des librairies de XSLT sous perl.
    Ca va être une autre paire de manches pour trouvé et ré-installer XSLT.
    Merci pour le code qui était bon.

Discussions similaires

  1. Condition en fonction du premier caractére?
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/02/2006, 02h52
  2. [Xml/XSl] utiliser des fonction vb
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/01/2006, 17h28
  3. [XSL] liste des fonctions
    Par pmartin8 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/12/2005, 17h24
  4. Réponses: 1
    Dernier message: 08/11/2005, 14h40
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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