2010-12-13 49 views
2

J'utilise une colonne de site "choice" avec l'option multiple-check activée pour que les utilisateurs puissent marquer un élément de liste avec plusieurs choix dans la colonne.Sharepoint XSL - coupe la chaîne en composants

Cette colonne alimente ensuite une fonctionnalité de conception dans une partie WebPart de requête de contenu - où le choix de colonne est ajouté pour créer un nom de fichier d'image.

  • Choice1
  • Choice2
  • Choice3
  • choice4

devient

<img src="http://mysite/content-Choice1.jpg /> 

Le problème que j'ai est que l'analyseur XSL est alimenté une chaîne qui a points-virgules (;) et hachages (#) séparant les valeurs de choix. Si les 4 options ont été cochés, la chaîne introduit dans l'analyseur XSLT serait:

;#Choice1;#Choice2;#Choice3;#Choice4 

Comment puis-je travailler à travers la chaîne et séparer chaque choix dans sa propre variable XSL?

J'ai essayé différentes fonctions de sous-chaîne, mais je n'arrive à rien.

+0

générales 'des questions xslt' devraient avoir une source d'entrée, de sortie et de la relation souhaitée. Cette question concerne un cadre XSLT spécifique. En tant que question XSLT générale, la réponse est qu'il n'y a aucun moyen pour 'Comment puis-je travailler à travers la chaîne et séparer chaque choix dans sa propre variable XSL? Vous pourriez construire un arbre de résultat temporaire (avec des fonctions d'extension pour XSLT 1.0) contenant un élément pour chaque chaîne "Choix". Voir les questions à propos de tokenizing dans XSLT. –

Répondre

2

Je recommanderais d'utiliser JavaScript pour analyser la chaîne et afficher en conséquence l'image en utilisant JavaScript.

+1

Hiya - le XSL est analysé dans MOSS avant qu'il n'atteigne la page, donc je préfère une solution XSLT côté serveur au post-traitement sur la page. – MrFidge

+0

Allez avec la réponse frederic puis :) –

+0

Vous pouvez avoir [intégré javascript dans le XSL] (http://www.w3.org/TR/xslt11/#ecmascript-binding) – rds

2

Puisque XPath 1.0 ne supporte pas la fonction tokenize(), vous devrez faire tout le travail vous-même. Par exemple, vous pouvez générer les éléments <img> récursive des choix:

<xsl:template name="RecurseConvertChoicesToImages"> 
    <xsl:param name="choices" /> 

    <xsl:variable name="token" 
     select="substring-before($choices, ';#')" /> 
    <xsl:variable name="nextToken" 
     select="substring-after($choices, ';#')" /> 

    <xsl:if test="$token"> 
     <img src="http://mysite/content-{$token}.jpg" /> 
    </xsl:if> 
    <xsl:if test="$nextToken"> 
     <xsl:call-template name="RecurseConvertChoicesToImages"> 
      <xsl:with-param name="choices" select="$nextToken" /> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
+0

A aimé votre réponse –

+0

@Ashutosh Singh, si vous aimez la réponse, cliquez sur "cette réponse est utile" flèche vers le haut. – rds