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 :

Réutiliser la valeur d'un élément avec xsl:variable


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Réutiliser la valeur d'un élément avec xsl:variable
    Bonjour à tous !

    J'aimerai créer via XSL un document HTML présentant un tableau listant des adresses d'un document XML. Chaque ligne du tableau doit comprendre une adresse complète: id, voie, commune, longitude et latitude.

    Voici mon document XML:

    Code XML :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
    <depistages>
      <adresses>
        <foyer>
          <id>xxx</id>
          <voie>ccc</voie>
          <commune>aaa</commune>
        </foyer>
        <foyer>
          <id>zzz</id>
          <voie>ggg</voie>
          <commune>yyy</commune>
        </foyer>
     
     </adresses>
      <geolocalisations>
        <localisation>
          <id>eee</id>
          <longitude>ggg</longitude>
          <latitude>hhh</latitude>
        </localisation>
        <localisation>
          <id>lllllllllllllllll</id>
          <longitude>tttttttttttt</longitude>
          <latitude>kkkkkkkkkkk</latitude>
        </localisation>
     
      </geolocalisations>
    </depistages>



    Voici le code pour le tableau:

    Code XSL :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
     <table>
                        <tr> 
                            <th> Id</th> 
                            <th>Voie</th>
                            <th>Commune</th>
                            <th >Longitude</th>
                            <th>Latitude</th>
                        </tr>
    
                        <xsl:for-each select = "//foyer | //localisation">
                            
                            <xsl:sort  select="id" />
                            <xsl:variable name="id" select="id" />
                            
                            <tr>     
                                <td>
                                    <xsl:value-of select = "$id"/>
                                </td>
                                <td>
                                    <xsl:value-of select = "voie"/>
                                </td>
                                <td>
                                    <xsl:value-of select = "commune"/>
                                </td> 
                                <td>
                                    <xsl:value-of select = "longitude"/>
                                </td>
                                <td>
                                    <xsl:value-of select = "latitude"/>
                                </td>
                             </tr>    
                        </xsl:for-each>
    
    </table >


    J'obtiens un tableau comprenant les bonnes adresses ( identifiant de foyer associé à identifiant de localisation ) car les données sont triées par identifiant. Mais le problème est que j'obtient sur une ligne, les valeurs de Id, Voie, et Commune et sur la suivante, les valeurs de Id (encore), longitude et latitude associées. Comment réutiliser la valeur de l'élément id pour afficher la bonne localisation et ne pas avoir de répétition en utilisant xsl:variable ?

    Merci pour votre aide !

  2. #2
    Membre émérite
    La question est bien mal posée. Il faut ajouter un discours sur identification des id's concordants entre foyers et localisations - ce qu'on appelle quelquefois un "look-up"

    En tout car, je pense ce qu'on veut est quelque comme ça.
    Code xslt1 :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
    <xsl:template match="adresses">
        <table>
            <tr>
                <th>Id</th>
                <th>Voie</th>
                <th>Commune</th>
                <th >Longitude</th>
                <th>Latitude</th>
            </tr>
            <xsl:for-each select="foyer">
                <xsl:sort select="id" />
                <xsl:variable name="id" select="id" />
                <tr>
                    <td><xsl:value-of select = "$id"/></td>
                    <td><xsl:value-of select = "voie"/></td>
                    <td><xsl:value-of select = "commune"/></td>
                    <td><xsl:value-of select = "../following-sibling::geolocalisations/localisation[id=$id]/longitude"/></td>
                    <td><xsl:value-of select = "../following-sibling::geolocalisations/localisation[id=$id]/latitude"/></td>
                </tr> 
            </xsl:for-each>
        </table >
    </xsl:template>

  3. #3
    Candidat au Club
    Super merci beaucoup !