XSLT: Paramètre de Test pour savoir si elle a été définie
J'ai une situation où le paramètre ne sera pas réglé, mais mes tentatives de capture & gérer la sitation ne sont pas de travail.
Je suis en utilisant les suivantes:
<xsl:template match="xs:complexType">
<xsl:param name="prefix" />
<xsl:variable name="prefix-no-core">
<xsl:choose>
<!-- if no value, default to 'AcRec' -->
<xsl:when test="not($prefix)">
<xsl:value-of select="'AcRec'" />
</xsl:when>
<!-- if 'core', leave as empty string -->
<xsl:when test="$prefix = 'core'">
</xsl:when>
<!-- if 'AcRec', set the value -->
<xsl:when test="$prefix = 'AcRec'">
<xsl:value-of select="$prefix" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xs:complexType name="{concat($prefix-no-core, @name)}">
...
</xsl:template>
J'ai aussi essayé de $prefix=" dans le premier test - ni travail. mais si j'utilise:
<xsl:value-of select="not($prefix)" />
... la valeur imprime comme vrai. Mais dans mon xsl:choisissez ne produit pas de sortie.
OriginalL'auteur OMG Ponies | 2009-07-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez spécifier une valeur par défaut pour le paramètre, de cette façon quand il n'est pas passé, vous pouvez les vérifier.
Bien que dans votre exemple, il ressemble juste avoir une valeur par défaut permettrait de simplifier les choses grandement.
Appeler comme ça, et la valeur par défaut-valeur":
Appeler comme ça, et la valeur sera "passé-valeur":
EDIT: Pour être complet, la forme simplifiée de l'exemple original est:
<xsl:param name="prefix">literal value here</xsl:param>
OriginalL'auteur davenpcj
C'est un hack, mais j'ai eu du succès par le premier emballage le paramètre avec la normalize-space() la fonction avant de tester un vide param.
OriginalL'auteur Ishmael
Remarque: remplace l'ancienne réponse, vérifiez dans l'histoire, si vous le souhaitez.
D'entrée suivantes:
De la Fed, à la suite de XSLT:
Donne le résultat suivant:
Je ne suis pas sûr de ce que vous cherchez...
Essayé - le xsl:autrement, c'est de me donner des faux positifs, en appliquant le préfixe à ceux qu'elle ne le devrait pas.
Lorsque vous souhaitez pas appliquer le préfixe? Encore une fois, donnez-nous le cas d'utilisation complet. Si prefix=de base, vous ne voulez pas de préfixe. Si le préfixe n'est pas défini, vous voulez AcDec comme préfixe. Qu'est-ce que l'autre cas? Voulez-vous utiliser le préfixe fourni, ou voulez-vous d'avoir à ajouter manuellement un cas pour chaque "autorisé" préfixe. Si oui, ce qui se passe à l'appelant fournit un préfixe que vous ne reconnaissez pas?
Le premier extrait de code de travail? Si non, quel est le problème que vous rencontrez avec elle?
Pour le fichier en cours, "de base" et "AcRec" sont les seuls préfixes, je peux attendre. Cependant, je ne vais pas utiliser != "de base", parce que la source pourrait changer. Le problème est que la première fois que le modèle fonctionne, il n'y aura pas une valeur de préfixe. Mais les tentatives pour attraper cette situation dans un moment où le test n'a pas - à- pas($prefix) et $prefix=" ne pas exécuter quand je l'ai tester.
OriginalL'auteur Chris Marasti-Georg
Des suggestions faites à ce jour, la seule solution qui a fonctionné a été de toujours régler la valeur du paramètre lors de l'appel du modèle est faite. Par exemple, auparavant j'ai eu:
Cela a dû être changé pour:
J'aimerais vraiment savoir pourquoi($param) et $param=" ne fonctionnent pas dans une QUAND le test, mais je peux obtenir la valeur du pas($param) dans un xsl:value-of déclaration.
OriginalL'auteur OMG Ponies