2012-11-02 3 views
3

Y at-il une ligne si la condition dans xslt tels que supposer que je veux ajouter des attributs uniquement sur la base d'une conditionajouter des attributs à base XSL à condition

par exemple

<name (conditionTrue then defineAttribute)/> 

juste pour éviter si

<xsl:if test="true"> 
    <name defineAttribute/> 
</xsl:if> 

Répondre

7

Vous pouvez utiliser <xsl:element> pour créer l'élément de sortie et <xsl:attribute> pour ses attributs. Ensuite, l'ajout d'attributs conditionnels est simple:

<xsl:element name="name"> 
    <xsl:if test="condition"> 
    <xsl:attribute name="myattribute">somevalue</xsl:attribute> 
    </xsl:if> 
</xsl:element> 
+1

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

6

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.

+1

merci l'homme, c'était complet clair, grands acclamations :-) – Noor

Questions connexes