Salut , SVP Comment choisir une partie précise d'un contenu d'une balise d'un fichier XML en utilisant XSLT?
Salut , SVP Comment choisir une partie précise d'un contenu d'une balise d'un fichier XML en utilisant XSLT?
Bonjour,
Contrairement à de nombreuses idées reçues, donner des exemples concrets et précis permet en fait une meilleure communication, pas moins bonne.
Exemple : en utilisant select.
C'est une réponse dans le sujet et probablement correcte, mais il y a des chances que tu ne sois pas plus avancé.
Voici une partie de mon code XML :
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 <Folder> <name>Caidat.xlsx</name> <Placemark> <styleUrl>#icon-503-DB4436</styleUrl> <name>Caïdats TAMRI</name> <ExtendedData> <Data name='Latitude'> <value>30.698140</value> </Data> <Data name='Longitude'> <value>-9.825026</value> </Data> </ExtendedData> <description><![CDATA[Latitude: 30.698140 Longitude: -9.825026<br><br>Latitude: 30.698140<br>Longitude: -9.825026]]></description> <Point> <coordinates>-9.825026,30.69814,0.0</coordinates> </Point> </Placemark>
Et voilaa une autre partie du code XSLT correspondant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xsl:for-each select="/Document/Folder[position()=1]/Placemark"> <tr> <td><xsl:value-of select="name" /></td> <td><xsl:value-of select="description" /></td>
Ce que je veux faire par la suite c'est d'extraire les 3 champs - séparés au dessus par virgule - de la balise <coordinates/> chacun dans une <td/>
Ah, du coup, si pour ton malheur tu es coincé en XSLT 1.0, non, ce n'est pas avec select.
En XSLT 2.0 ça se ferait comme ça :
Mais en XSLT 1.0, il n'y a pas moyen...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <xsl:for-each select="tokenize(Point/coordinates, ',')"> <td><xsl:value-of select="."/></td> </xsl:for-each>
La seule solution est d'utiliser un template nommé récursif.
Exemple : pour transformer
En
Code : Sélectionner tout - Visualiser dans une fenêtre à part <fruits>Des pommes-des poires-des scoubidous</fruits>
On peut faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <tr> <td>Des pommes</td> <td>des poires</td> <td>des scoubidous</td> </tr>
Y a pas tellement plus simple, à moins que le moteur XSLT gère EXSLT ou les extensions natives...
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 <xsl:template match="fuits"> <tr> <xsl:call-template name="liste-fruits"> <xsl:with-param name="liste" select="."/> </xsl:call-template> </tr> </xsl:template> <xsl:template name="liste-fruits"> <xsl:param name="liste"/> <xsl:choose> <xsl:when test="contains($liste, '-')"> <td><xsl:value-of select="substring-before($liste, '-')"/></td> <xsl:call-template name="liste-fruits"> <xsl:with-param name="liste" select="substring-after($liste, '-')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="$liste"/></td> </xsl:otherwise> </xsl:choose> </xsl:template>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager