Voici un exemple comment éviter complètement la nécessité de préciser <xsl:if>
:
Ayons ce document XML:
<a x="2">
<b/>
</a>
et nous voulons ajouter à b
un attribut parentEven="true"
seulement dans le cas où la valeur duL'attributdu parent b
est un nombre pair.
Voici comment faire cela sans instructions conditionnelles explicites:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="a[@x mod 2 = 0]/b">
<b parentEven="true">
<xsl:apply-templates select="node()|@*"/>
</b>
</xsl:template>
</xsl:stylesheet>
Lorsque cette transformation est appliquée sur le document XML ci-dessus, le résultat recherché, correct produit:
<a x="2">
<b parentEven="true"/>
</a>
Prenez note:
L'utilisation de gabarits et de motifs correspondants permet d'éliminer complètement la nécessité de spécifier des instructions conditionnelles explicites. La présence d'instructions conditionnelles explicites dans le code XSLT doit être considérée comme une "odeur de code" et doit être évitée autant que possible.
Je voudrais mentionner que vous devez le faire immédiatement après l'ouverture de l'élément. Vous ne pouvez pas faire d'autres choses en premier. – DanMan