Bonjour,
Mettons que j'ai le fichier XML suivant :
Le principe est que tous mes animaux ont un nom, mais seuls les mamiferes ont une temperature interne. Je voudrais afficher tous mes animaux de le même façon dans une liste, mais dans le cas particulier des mamiferes afficher en plus leur temperature. Tout cela en evitant les xsl:when et xsl:if. L'equivalent en poo serait un classe animal possedant une methode toList() qui afficherait le nom. Cette methode serait redefinie dans la sous-classe mamifere qui appelerai d'abord la methode heritée (super.toList() en java, inherited en Delphi) avant d'afficher la temperature.
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 <animal race="mamifere"> <nom>chat</nom> <temperature_interne>36</temperature_interne> </animal> <animal race="mamifere"> <nom>chien</nom> <temperature_interne>35</temperature_interne> </animal> <animal race="mamifere"> <nom>baleine</nom> <temperature_interne>40</temperature_interne> </animal> <animal race="reptile"> <nom>tortue</nom> </animal> <animal race="poisson"> <nom>saumon</nom> </animal> <animal race="poisson"> <nom>brochet</nom> </animal>
Voilà ce que j'obtiens si j'essaie de faire l'équivalent en XSL :
J'obtiens bien un comportement specifique pour les mamiferes, mais la ligne "<xsl:value-of select="nom"/>" qui est commune est répétée deux fois. Autrement dit, je n'arrive pas à faire l'équivalent à ce qui serait un appel à la methode heritée en poo (super.xxx() ou inherited).
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="animaux"> <HTML> <HEAD> <TITLE>Document Title</TITLE> </HEAD> <BODY> <UL> <xsl:apply-templates/> </UL> </BODY> </HTML> </xsl:template> <xsl:template match="animal"> <LI> <xsl:value-of select="nom"/> </LI> </xsl:template> <xsl:template match="animal[@race='mamifere']"> <LI> <xsl:value-of select="nom"/> <xsl:value-of select="temperature_interne"/> </LI> </xsl:template> </xsl:stylesheet>
Des pistes ?
Phil
PS : désolé pour l'exemple idiot...![]()
Partager