À l'aide de xsl variable pour capturer la sortie de call-template retour vide pour moi
J'ai vu beaucoup de messages que de faire quelque chose de ce genre et qui me fait me sentir comme ce est possible et je suis tout à fait quelque chose de mal. J'ai simplifié autant que possible pour essayer de comprendre pourquoi ce qui se passe:
Heres mon xml (rien de très passionnant):
<?xml version="1.0" encoding="UTF-8"?>
<REPORT>
</REPORT>
Voici mon xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="REPORT">
<xsl:variable name="tryThisTemplate">
<xsl:call-template name="TRY_THIS"/>
</xsl:variable>
<TEST1>
<xsl:call-template name="TRY_THIS"/>
</TEST1>
<TEST2>
<xsl:value-of disable-output-escaping="yes" select="$tryThisTemplate" />
</TEST2>
<TEST3>
<xsl:value-of select="$tryThisTemplate" />
</TEST3>
</xsl:template>
<xsl:template name="TRY_THIS">
<MY_NODE desc="my description" />
</xsl:template>
</xsl:stylesheet>
Voici mon résultat:
<?xml version="1.0" encoding="utf-8"?>
<TEST1>
<MY_NODE desc="my description"/>
</TEST1>
<TEST2></TEST2>
<TEST3></TEST3>
Voici ma question:
Comment se fait-TEST2 et TEST3 ne fonctionnent pas. L' $tryThisTemplate variable semble être vide. Suis-je un malentendu quelque chose ici. Devrais-je faire cela d'une manière différente?
Bonne question, +1. Voir ma réponse pour l'explication et la solution complète.
OriginalL'auteur testing123 | 2011-06-13
Vous devez vous connecter pour publier un commentaire.
Ici est la bonne façon de le faire (notez que DOE n'est pas nécessaire et devrait être évité):
lorsque cette transformation est appliquée sur le document XML fourni par le:
le résultat voulu est produit:
Explication:
<xsl:copy-of>
copies (comme son nom l'indique) des nœuds.<xsl:value-of>
sorties de la chaîne de valeur de ce qui est en sonselect
attribut. La chaîne de valeur d'un élément est la concaténation (dans l'ordre du document) de l'ensemble de ses nœud texte descendants. Dans votre cas, l'élément n'a pas de nœud texte descendants et donc<xsl:value-of>
sorties de rien.Très bonne explication. Merci d'avoir pris le temps de m'aider à comprendre.
Vous êtes les bienvenus.
OriginalL'auteur Dimitre Novatchev
Oui il y a un malentendu ici. Si vous essayez de copier la structure de
$tryThisTemplate
à la sortie, vous devez utiliser<xsl:copy-of>
au lieu de<xsl:value-of>
.<xsl:value-of>
sorties de la chaîne de valeur de ses sélectionnez argument, qui est, à son contenu textuel, qui dans ce cas est une chaîne vide.OriginalL'auteur LarsH
La variable n'est pas vide, mais avec
xsl:value-of
vous vous demandez quels sont les nœuds de texte à l'intérieur. C'est "vide".Par exemple, essayez avec:
Et vous verrez apparaître comme par magie
MY_NODE
entreTEST3
:))OriginalL'auteur Emiliano Poggi
découvrez ma solution
voici mon modèle (a vériables contenu)
et quand je les utiliser dans un autre modèle tout simplement je viens de l'appeler comme ça
espère que cela vous aide
OriginalL'auteur Basheer AL-MOMANI