La segmentation et le tri avec XSLT 1.0
J'ai une chaîne délimitée (délimité par des espaces dans mon exemple ci-dessous) que j'ai besoin de marquer, de les trier, puis rejoindre de nouveau ensemble et j'ai besoin de faire tout cela à l'aide de XSLT 1.0. Comment dois-je procéder? Je sais que j'ai besoin d'utiliser xsl:sort
en quelque sorte, mais tout ce que j'ai essayé jusqu'à présent m'a donné une sorte d'erreur.
Par exemple, si j'exécute le code en bas de cette annonce, j'obtiens ceci:
fraises et bleuets orange framboise
la chaux de citron
Que ferais-je si je voulais obtenir cette place?:
aux bleuets et citron lime orange framboise
fraise
Remarque que je suis en utilisant XSLT 1.0.
Voici le code, qui est basé sur du code de Jeni Tennison.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="tokenize1.xsl"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="'strawberry blueberry orange raspberry lime lemon'" />
</xsl:call-template>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimiter" select="' '" />
<xsl:choose>
<xsl:when test="$delimiter and contains($string, $delimiter)">
<token>
<xsl:value-of select="substring-before($string, $delimiter)" />
</token>
<xsl:text> </xsl:text>
<xsl:call-template name="tokenize">
<xsl:with-param name="string"
select="substring-after($string, $delimiter)" />
<xsl:with-param name="delimiter" select="$delimiter" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<token><xsl:value-of select="$string" /></token>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
OriginalL'auteur Paul Reiners | 2009-06-19
Vous devez vous connecter pour publier un commentaire.
Voici l'inefficacité d'un pur version 1 solution:
OriginalL'auteur
Si votre processeur supporte EXSLT, vous feriez mieux d'utiliser str:marquer
Pour le tri, pourquoi ne pas utiliser xsl:sort?
Remarque que vous pourriez avoir besoin exsl:node-set ne l'itération.
Pourquoi ne pas utiliser xsl:sort??
Parce que xsl:sort s'applique aux jeux de nœuds, mais ses jetons seulement jamais existé comme résultat fragments d'arbres.
Évidemment, vous devez utiliser exsl:node-set ou quel que soit votre moteur XSLT fournit. Rtf sont "la chose la plus stupide que dans les calculs, des années 90", officiellement.
Aussi, avez-vous vérifier que ça ne marcherait pas?
OriginalL'auteur alamar