7
votes

XSLT: paramètre de test pour savoir s'il a été défini

J'ai une situation où le paramètre ne sera pas défini, mais mes tentatives de capture et de manipulation de la situation ne fonctionnent pas.

J'utilise les éléments suivants: xxx

J'ai aussi essayé $ préfixe = '' dans le premier test - ni travailler. Mais si j'utilise: xxx

... la valeur imprime comme vrai. Mais en utilisant cela dans mon XSL: Choisir ne produisez pas de sortie.


0 commentaires

4 Réponses :


1
votes

Remarque: remplacée Ancienne réponse, chèque historique si vous le souhaitez.

L'entrée suivante: p> xxx pré>

a été introduite sur le XSLT suivant: p>

<xs:complexType name="AcRecsomething" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<xs:complexType name="AcRecsomethingElse" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>


6 commentaires

J'ai besoin de soutenir la possibilité d'autres préfixes.


Essayé - le XSL: sinon me donne de faux positifs, en appliquant le préfixe à ceux qu'il ne devrait pas.


Quand ne voulez-vous pas appliquer le préfixe? Encore une fois, donnez-nous le cas complet. Si préfixe = noyau, vous ne voulez pas de préfixe. Si le préfixe n'est pas défini, vous voulez ACDEC comme préfixe. Quel est l'autre cas? Voulez-vous utiliser le préfixe fourni ou souhaitez-vous ajouter manuellement un cas pour chaque préfixe "autorisé". Si oui, que se passe-t-il, l'appelant fournit un préfixe que vous ne reconnaissez pas?


Le premier extrait de code fonctionne-t-il? Sinon, quel est le problème que vous voyez avec cela?


Pour le fichier actuel, "CORE" et "ACREC" sont les seuls préfixes que je peux m'attendre. Cependant, je n'utiliserai pas! = 'Noyau' parce que la source pourrait changer. Le problème est que la première fois que le modèle est exécuté, il n'y aura pas de valeur de préfixe. Mais les tentatives d'attraper cette situation dans un test lorsque le test a tous échoué - pas ($ préfixe) et $ préfixe = '' Ne pas exécuter quand je le teste.


Essayez votre exemple où vous fournissez «noyau» comme préfixe - cela ne fonctionnera pas. La production est finalement arbitraire - le point est de gérer avec précision lorsqu'une valeur de paramètre / variable est / n'est pas définie.



1
votes

C'est un hack, mais j'ai eu le succès en emballant d'abord le paramètre avec la fonction Normalize-Space () avant de tester pour un param.

<xsl:value-of select="not(normalize-space($prefix))" />


1 commentaires

J'ai essayé cela comme une clause quand - il manipulait de faux positifs.



0
votes

des suggestions faites à ce jour, la seule solution qui a fonctionné était de toujours définir la valeur de paramètre lorsqu'un appel au modèle est effectué. Par exemple, j'avais précédemment:

<xsl:apply-templates select="//xs:complexType[@name='AddressType']">
  <xsl:with-param name="prefix" select="'AcRec'" />
</xsl:apply-templates>


0 commentaires

8
votes

Vous pouvez spécifier une valeur par défaut pour le paramètre, de cette façon quand elle n'est pas transmise, vous pouvez vérifier pour cela.

Bien que dans votre exemple, il semble que la valeur par défaut simplifierait des choses grandement. < / p> xxx

appelez comme ceci et la valeur sera "valeur par défaut": xxx

appelez comme ceci, et le La valeur sera "Valeur passée": xxx

EDIT: Pour l'exhaustivité, la forme simplifiée de l'exemple original est la suivante: xxx


1 commentaires

Si vous avez besoin d'une valeur par défaut d'un paramètre qui ne provient pas d'un élément XML (c.-à-d. Une valeur littérale codée à code papier), utilisez valeur littérale ici < / code>