XSL 1.0 - Comment l'utiliser pour-chaque-dessus d'une sous chaîne
À l'aide de XSL 1.0, j'ai trouvé un beau marquer la fonction. Maintenant, j'ai besoin de pour-chaque-dessus de la résultante des jetons. Je suis très nouveau à XSL.
Le php équivalent de ce dont j'ai besoin:
$in = 'a,b,c,d';
$tokens = explode (',', $in);
foreach ($tokens as $token) {
echo $token;
}
Voici ce que j'ai jusqu'à présent. Cette ligne de sortie a,b,c,d'-
<xsl:value-of select="@CommaSeparated" />
Cela va faire tourner la chaîne à travers le marquer fonction-
<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select="@CommaSeparated"/>
</xsl:call-template>
Et le marquer de la fonction. Je comprends que ce n'est tout simplement pas le format des données qu'il crache-
<xsl:template name="tokenize">
<xsl:param name="pText"/>
<xsl:if test="string-length($pText)">
<tag>
<xsl:value-of select=
"substring-before($pText, ',')"/>
</tag>
<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select=
"substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
- Alors, quelle est exactement votre question?
- Demandez-vous si XSLT prend en charge pour chaque? Oui, il n' -
xsl:for-each
, thoguh il est à éviter en faveur de l'affectation de modèle, si possible. - Pour l'enregistrement, ce que j'ai fini par faire, c'est écrit à plusieurs Marquer comme des fonctions qui ne le diviser et de sortie. Ainsi, le modèle " Tokenize_Links prendrait 'a, 'b', c' et de sortie '<a>a</a>, <a>b</a>, etc".
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, le marquer fonction n'est pas correcte. En théorie, il doit cracher une liste de tag éléments (à strictement parler, un "result tree fragment") comme
Mais il est en fait de rater le dernier élément
Vous êtes probablement mieux de trouver un autre marquer fonction ici (il doit y avoir sûrement de ceux qui travaillent ici, dans StackOverflow).
Mais, en réponse à votre question sur l'utilisation de xsl:for-each plus de cela, vous pourriez être tenté de faire quelque chose comme ça...
C'est-à-dire, de stocker la liste des tags dans une variable et ensuite une boucle au-dessus d'eux. Toutefois, si vous essayez ceci dans XSLT1.0 vous obtenez une erreur "Expression doit correspondre à un node-set.". Pour contourner ce problème, vous devez utiliser une fonction d'extension. EXSLT est probablement le plus commun. Vous pouvez déclarer dans votre XSLT comme
Vous pourriez tout simplement changer le xsl:for-each comme suit:
Donc, vu le code XML suivant
Et suivants XSLT
La suite est sortie (avec la dernière balise vide en raison de la buggé marquer la fonction que vous utilisez),
Vérifier ce code :