[XSLT] trier un arbre à partir d'un attribut
salut, g un fichier XML du type
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <MONXML>
<ELEMENT att="TRUE">
<SOUS_NOEUD>Texte quelquonque</SOUS_NOEUD>
<..../>
</ELEMENT>
<ELEMENT>
<SOUS_NOEUD>ReTexte quelquonque</SOUS_NOEUD>
<..../>
</ELEMENT>
<ELEMENT att="FALSE">
<SOUS_NOEUD>Texte quelquonque</SOUS_NOEUD>
<..../>
</ELEMENT>
</MONXML> |
le but est de récupérer en output les éléments n'ayant pas d'attribut att="TRUE" (ou pas d'att tout court)
:roll: :?:
Etat d avancement des travaux
apres avoir beaucoup testé et encore testé j'en suis arrivé au code suivant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!--Se place sur root-->
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<!-- filtre tous les elements pour retirer ceux qui ont un attribut ISNAT!=TRUE-->
<xsl:template match="*">
<xsl:choose>
<!-- qd on a un attribut @ISNAT on ne fait rien-->
<xsl:when test="@ISNAT"></xsl:when>
<xsl:otherwise><!-- sinon on copie et on réapplique le template-->
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> |
Ce Code filtre bien tous les éléments en ne laissant passer que ceux qui n ont pas d'attribut ISNAT (ce qui est suffisant, pas besoin de tester la valeur pour l instant)
Mon problème: si un élément recopié a un ou des attributs, ceux ci ne sont pas recopié :!:
Alors , pourquoi (histoire de comprendre) et aussi comment :?:
Merci bcp
Re: Etat d avancement des travaux
Citation:
Envoyé par tiscars
Mon problème: si un élément recopié a un ou des attributs, ceux ci ne sont pas recopié :!:
Alors , pourquoi (histoire de comprendre) et aussi comment :?:
Merci bcp
la commande xsl:copy ne prend jamais les attributs
si tu veux les copiers il te faudra un code comme celui de
http://www.developpez.net/forums/viewtopic.php?t=236229
tu enleve la traduction
Code:
1 2 3 4 5
| <xsl:template match="@*">
<xsl:attribute name="{$newName}">
<xsl:value-of select=".">
</xsl:attribute>
</xsl:template> |