2013-02-19 6 views
0

Je cette valeur de xml et je dois créer une zone de liste déroulante en utilisant xslt 1.0Créer zone de liste déroulante dans xslt

c'est le xml que je reçois de la base de données:

<CER_Pot> 
    <Record CIMtrek_CERPot="Bus Dev|Ser Del|Sol Del|?" /> 
</CER_Pot> 

et voilà comment je créer zone de liste déroulante en xslt:

<select size="1" style="width:60%;" name="CIMtrek_CI_CER_Pot" 
               id="CIMtrek_CI_CER_Pot"> 
               <option value="0">Select Fund Pot</option> 
               <xsl:for-each select="//CER_Pot/Record"> 
                 <option> 
                  <xsl:if 
                   test="//Record/CIMtrek_CERPot/text()[email protected]_CI_CER_Pot"> 
                   <xsl:attribute name="selected">true</xsl:attribute> 
                  </xsl:if> 
                  <xsl:attribute name="value"><xsl:value-of 
                   select="@CIMtrek_CERPot" /></xsl:attribute> 
                 <xsl:value-of select="@CIMtrek_CERPot" /> 
                 </option> 
                </xsl:for-each> 
              </select> 

cela me donne la boîte combo sans aucun problème, mais je voudrais avoir une zone de liste déroulante qui aura les valeurs DIVISEES base ce delimiter | donc dans ce cas, il serait quatre rangées

Bus Dev 
Ser Del 
Sol Del 
? 

Comment faire cela dans xslt

S'il vous plaît aidez-moi à obtenir son fait.

Cordialement

+0

Un combobox est un contrôle de l'interface utilisateur qui est une combinaison (d'où le nom) d'un menu déroulant (qui est ce que vous obtenez avec une sélection dans HTML) et une entrée de texte (une entrée de type texte). HTML n'a aucun contrôle natif représenté sous forme de liste déroulante. Vous avez un select. Appelez-le un select. – Quentin

+0

Apprécié Quentin –

Répondre

1

Essayez cette XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 

    <xsl:template match="/"> 
     <select size="1" style="width:60%;" name="CIMtrek_CI_CER_Pot" id="CIMtrek_CI_CER_Pot"> 
      <option value="0">Select Fund Pot</option> 
      <xsl:for-each select="//CER_Pot/Record"> 
       <xsl:variable name="selectValues"> 
        <xsl:call-template name="tokenize"> 
         <xsl:with-param name="pText" select="@CIMtrek_CERPot"/> 
         <xsl:with-param name="pDelim" select="'|'" /> 
        </xsl:call-template> 
       </xsl:variable> 

       <xsl:for-each select="$selectValues/item"> 
        <xsl:variable name="curItem" select="." /> 
        <option> 
         <xsl:if test="//Record/CIMtrek_CERPot/text()=$curItem"> 
          <xsl:attribute name="selected">true</xsl:attribute> 
         </xsl:if> 
         <xsl:attribute name="value"><xsl:value-of select="$curItem"/></xsl:attribute> 

         <xsl:value-of select="$curItem"/> 
        </option> 
       </xsl:for-each> 
      </xsl:for-each> 
     </select> 
    </xsl:template> 

    <xsl:template name="tokenize"> 
     <xsl:param name="pText"/> 
     <xsl:param name="pDelim"/> 

     <xsl:if test="string-length($pText)"> 
      <item> 
       <xsl:value-of select="substring-before($pText, $pDelim)"/> 
      </item> 

      <xsl:call-template name="tokenize"> 
       <xsl:with-param name="pText" select="substring-after($pText, $pDelim)"/> 
       <xsl:with-param name="pDelim" select="$pDelim" /> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Merci Mark pour votre message, mais je reçois cette exception 'Erreur: 'Erreur de vérification du type de l'expression' FilterParentPath (variable-ref (selectValues ​​/ résultat-arbre), étape (" enfant ", 26)) '. '' –

+0

@Anto: Je ne trouve pas cette expression dans le XSLT que j'ai livré ni dans votre XSLT livré. Je suis désolé, mais je ne peux pas aider avec ça. –

+0

Merci pour le commentaire, quand j'ajoute votre code je reçois cette exception, dois-je donner mon fichier xsl? –

Questions connexes