2011-04-07 3 views
1

Duplicate possible:
Ignoring 'A' and 'The' when sorting with XSLTtri par la première lettre

J'ai une liste des lieux, mais quelques-unes des thèses lieux ont le mot 'le' devant. J'ai besoin d'aide pour trier ces endroits dans l'ordre alphabétique en rejetant le 'the'. par exemple les montagnes, devraient être juste des montagnes. Je peux enlever le mot 'the' pour afficher le nom en utilisant la sous-chaîne mais le tri ne semble pas pouvoir lire ceci.

J'ai ceci jusqu'à présent.

<xsl:sort data-type="text" order="ascending" select="@places" /> 

exemple de ce qui revient:

alpha
sigma
la bêta

aimerait à revenir avec:

alpha
beta
sigma

cela est juste un exemple de la façon dont je dépouillé du nom:

<xsl:choose> 
     <xsl:when test="substring((@places), 0, 4) = 'The'"> 
      <xsl:value-of select="substring(
            (@places), 
            4, 
            string-length(@places) 
           )" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="@places" /> 
     </xsl:otherwise> 
</xsl:choose> 

Répondre

1

Utilisation:

<xsl:sort select="substring(@places, 5 * starts-with(@places,'the ')" /> 

Remarque: Vous pouvez également utiliser la fonction translate() pour insensibilité à la casse.

+0

merci pour la réponse rapide, mais cela ne semble pas fonctionner .... j'ai essayé il le garde toujours dans le même ordre que si le 'The' était encore là.translate enlèvera tous les t, h et e du reste du nom aussi . s'excuser ... je ne suis pas le meilleur à ce – Hatzi

+0

je semble l'avoir obtenu en utilisant ...merci pour votre aide – Hatzi

+0

@Hatzi: Cette 'substring (@places, 5) * starts-with (@places, 'The')' ** n'est pas ce que j'ai écrit **. Et la solution 'substring-after()' n'est pas tout à fait correcte: la sous-chaîne pourrait être dans n'importe quel endroit et non dans la première position. –

Questions connexes