Dans le fichier .xml, j'ai comme ceci:avec sortie xslt
<function>true</function>
Dans le schéma ile, je l'ont défini comme une valeur booléenne. Alors maintenant, ça fonctionne correctement. MAIS pour le fichier XSLT-à-dire .xsl,
Dans le fichier .xml, j'ai comme ceci:avec sortie xslt
<function>true</function>
Dans le schéma ile, je l'ont défini comme une valeur booléenne. Alors maintenant, ça fonctionne correctement. MAIS pour le fichier XSLT-à-dire .xsl,
Vous pouvez utiliser xsl:choose
:
<td>
<xsl:choose>
<xsl:when test="function = 'true'">@</xsl:when>
<xsl:otherwise> </xsl:otherwise>
</xsl:choose>
</td>
son ne fonctionne pas ... & 32 est ce que?/Il jette une erreur? – user507087
@ user507087 - désolé, il est supposé être l'entité pour l'espace (' '). J'ai raté le #. – Oded
Cette entité spatiale sera supprimée de la feuille de style. –
Cela peut se faire très simplement, pas du tout exigeant des instructions XSLT conditionnelles, et tout à fait dans l'esprit du XSLT (push-style):
Cette transformation:
<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="function/text()[.='true']">@</xsl:template>
<xsl:template match="function/text()[not(.='true')]">
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="function">
<td><xsl:apply-templates/></td>
</xsl:template>
</xsl:stylesheet>
lorsqu'il est appliqué sur le document XML suivant:
<function>true</function>
produit le résultat souhaité, correct:
<td>@</td>
Lorsque la même transformation est appliquée sur le document XML suivant:
<function>false</function>
à nouveau la bonne, résultat recherché est produit:
<td> </td>
Enfin, en utilisant un hack (en XSLT 2.0/XPath 2.0 est pas nécessaire), on peut utiliser un seul modèle:
<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="function">
<td>
<xsl:value-of select=
"concat(substring('@', 1 div (.='true')),
substring(' ', 1 div not(.='true'))
)
"/>
</td>
</xsl:template>
</xsl:stylesheet>
Je pense que l'utilisation de conditions est préférable que d'avoir à écrire la condition deux fois. – svick
@svick: L'alternative que vous pensez est meilleure a une composition beaucoup plus basse (probablement proche de zéro). En outre, il a une complexité beaucoup plus grande et est nettement plus enclin à commettre des erreurs. –
Pouvez-vous ajouter un exemple xsl décrivant ce que vous voulez faire? – wimh
plz vérifier la partie mise à jour – user507087
Bonne question, +1. Voir ma réponse pour une solution complète et courte qui n'utilise aucune instruction conditionnelle XSLT. Aussi attendre un hack encore plus court, à venir ... :) –