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] Boucle imbriquée


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 94
    Points : 46
    Points
    46
    Par défaut [XSLT] Boucle imbriquée
    Bonjour,

    J'ai cherché dans tous les sens mais j'ai pas réussi à résoudre mon probléme qui est le suivant :
    J'ai un fichier XML un peu tordu :
    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
    37
    38
    39
    40
    41
    <!-- Created with Liquid XML Studio Developer Edition (Trial) 8.1.7.2743 (http://www.liquid-technologies.com) -->
    <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
        <s:Schema id="RowsetSchema">
            <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
                <s:AttributeType name="ows_Attachments" rs:name="Pièces jointes" rs:number="1">
                    <s:datatype dt:type="boolean" dt:maxLength="1" />
                </s:AttributeType>
                <s:AttributeType name="ows_LinkTitle" rs:name="Titre" rs:number="2">
                    <s:datatype dt:type="string" dt:maxLength="512" />
                </s:AttributeType>
                <s:AttributeType name="ows_Variable1" rs:name="Variable1" rs:number="3">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_variable2" rs:name="variable2" rs:number="4">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_variable3" rs:name="aaaa" rs:number="5">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_variable4" rs:name="variable4" rs:number="6">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_variable5" rs:name="variable5" rs:number="7">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_variable6" rs:name="variable6" rs:number="8">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_variable7" rs:name="zzzz" rs:number="9">
                    <s:datatype dt:type="float" dt:maxLength="8" />
                </s:AttributeType>
                <s:AttributeType name="ows_ID" rs:name="ID" rs:number="10">
                    <s:datatype dt:type="i4" dt:maxLength="4" />
                </s:AttributeType>
            </s:ElementType>
        </s:Schema>
        <rs:data>
            <z:row ows_Attachments="0" ows_LinkTitle="clientFS" ows_Variable1="25.0000000000000" ows_variable2="52.0000000000000" ows_variable3="26.0000000000000" ows_variable4="62.0000000000000" ows_variable6="26.0000000000000" ows_ID="4" />
            <z:row ows_Attachments="0" ows_LinkTitle="client2bis" ows_Variable1="213.000000000000" ows_variable2="6.00000000000000" ows_variable3="54.0000000000000" ows_variable4="654.000000000000" ows_variable5="13864.0000000000" ows_variable6="564.000000000000" ows_variable7="4.00000000000000" ows_ID="5" />
        </rs:data>
    </xml>
    En résumé, je cherche à récuperer la valeur des attributs ows_Variable1,ows_Variable2,ows_Variable3 ... ainsi que le nom de ces variables là. Ce nom est dans le noeud AttributeType qui contient :
    un attribut name qui contient le nom de l'attribut tel qu'il est dans le noeud row, et un attribut rs:name qui lui contient le VRAI nom d ela variable que je souhaite récuperer.

    J'ai essayé de faire ça avec une boucle imbriquée, la premiere boucle sur tous les attributs du noeud row et qui récupere leur noms.
    La deuxieme boucle sur tous les neodu AttributeType et récupere le contenu des attributs name et rs:name. enfin, je compare le contenu de l'attribut name avec avec le nom des attributs du noeud z:row si c'est les même je recupere le rs:name ainsi que la valeur de l'attribut ...

    Ma premiere boucle ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="//rs:data/z:row">
                            <xsl:variable name="ID" select="position()"/>
                            <xsl:variable name="nomColonneInterneRow" select="name(@*)" />
                            <xsl:variable name="lavaleur" select="@nomColonneInterneRow" />
    Il me récupere que le nom du premier attribut du noeud z:row : ows_Attachments, en plus j'arrive pas à récuperer sa valeur ... (@nomColonneInterneRow)


    J'espere que quelqu'un va réussir à comprendre quelque chose ...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Sélectionner tous les attributs d'éléments z:row :

    Récupérer le nom d'un attribut qui est le nœud en cours :

    Récupérer la valeur d'un attribut qui est le nœud en cours :

    mais il suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="."/>
    Et il appelle string() lui-même, ce qui donne donc la valeur de l'attribut.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    Je conaissais pas string().
    Aprés utilisation de tout ce que tu m'a donné, j'obtiens ce XSL :

    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
    <table border="1" id="lesClients">
                        <xsl:for-each select="//rs:data/z:row">
                            <xsl:variable name="ID" select="position()"/>
                            <tr>
                                <td><input type="button" onClick="window.location='http://contenu/DispForm.aspx?ID={$ID}'" value="Modifier"/></td>
                                <td WIDTH="70" align="center" onClick="put({$ID})"  title="Cliquez pour executer">
                                    <b><xsl:value-of select="@ows_LinkTitle" /></b>
                                </td>
     
                                <xsl:for-each select="//rs:data/z:row/@*">                        
                                    <xsl:variable name="nomColonneInterneRow" select="name()" />
                                    <xsl:variable name="lavaleur" select="string()" /> 
     
                                    <xsl:for-each select="//s:ElementType/s:AttributeType">                                                                  
                                        <xsl:if test="$nomColonneInterneRow=@name and @name!='ows_Attachments' and @name!='ows_LinkTitle' and @name!='ows_ID'">
                                                <td id="T{$ID}_{@rs:name}">
                                                    <xsl:value-of select$lavaleur"/>  
     
                                                </td>                                   
                                        </xsl:if>
                                    </xsl:for-each>  
                                </xsl:for-each>  
                            </tr>
                        </xsl:for-each>
                    </table>
    Le probléme c'est qu'il m'affiche toutes les valeurs de tous les attributs qui sont dans le noeud z:row. J'aimerai qu'il m'affiche que ceux qui existe dans le noeud et ne pas tout mélanger.

    J'ai toirs boucles. la premiere me sert à récuperer le ows_LinkTitle et construire la ligne ainsi qu'un ID pour savoir combien de ligne j'ai en tout(noeud z:row).
    La suivante pour récuperer tous les attributs des noeud z:row, et la derniere pour le noeud AttributeType.


    Résultat :
    http://www.zimagez.com/zimage/tableau87.php#

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par cinou01 Voir le message
    Le probléme c'est qu'il m'affiche toutes les valeurs de tous les attributs qui sont dans le noeud z:row. J'aimerai qu'il m'affiche que ceux qui existe dans le noeud et ne pas tout mélanger.
    Ben...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="@*">

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    oui je sais ... mais je vois pas comment récuperer tous les attributs de chaque noeud z:row avec la seule boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="//rs:data/z:row">
    C'est pourquoi j'en ai fait deux

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    A priori

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="//rs:data/z:row/@*">
    fait exactement ça. Bien sûr, tu n'es pas prévenu à quel moment tu passes d'un z:row à l'autre. Donc, si tu veux l'être, effectivement, il te faut deux boucles.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    ok Merci pour ton aide.
    je m'en suis sorti avec deux boucle faites ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="//rs:data/z:row">
                            <xsl:variable name="ID" select="position()"/>
     
    ....
    <xsl:for-each select="//rs:data/z:row[$ID]/@*">

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Je comprends pas trop ce qui te choque avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="//rs:data/z:row">
      <xsl:variable name="ID" select="position()"/>
    ....
      <xsl:for-each select="@*">

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

Discussions similaires

  1. [XSLT] boucles imbriquées
    Par cinou01 dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 26/11/2010, 17h45
  2. [XSLT] problème de boucle imbriquée en xsl/xpath
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2009, 18h30
  3. [XSLT] Boucles imbriquées qui ne marchent pas :s
    Par Fatjo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/10/2007, 10h35
  4. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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