Dieter B.: attribute aufsplitten

Moin.

an ein xml-Element ist ein Attribut angehängt: <tag enum="a,b,c" />

Nun möchte ich jeden einzelnen Teilstring (getrennt wird bei ,) in ein <option> einfügen:

<select>  
 <xsl:for-each select="attribute::enum">  
  <option><xsl:value-of select="meinGetrennterTeilstring"/></option>  
 </xsl:for-each>							  
</select>

Wie bekomme ich das hin?

  1. Hallo Dieter,

    an ein xml-Element ist ein Attribut angehängt: <tag enum="a,b,c" />

    Nun möchte ich jeden einzelnen Teilstring (getrennt wird bei ,) in ein <option> einfügen: ...

    XSLT 1.0:

    <xsl:variable name="sep" select="','"/><!-- Separator-Zeichen -->  
      
    <xsl:template match="tag">  
      <select>  
        <xsl:call-template name="strtmpl">  
          <xsl:with-param name="str" select="concat(@enum,$sep)"/>  
        </xsl:call-template>  
      </select>  
    </xsl:template>  
      
    <xsl:template name="strtmpl">  
      <xsl:param name="str"/>  
      <xsl:if test="string-length($str) > 0">  
        <option><xsl:value-of select="substring-before($str,$sep)"/></option>  
        <xsl:call-template name="strtmpl">  
          <xsl:with-param name="str" select="substring-after($str,$sep)"/>  
        </xsl:call-template>  
       </xsl:if>  
    </xsl:template>
    

    XSLT 2.0:

    <xsl:variable name="sep" select="','"/><!-- Separator-Zeichen -->  
      
    <xsl:template match="tag">  
      <select>  
        <xsl:for-each select="tokenize(@enum,$sep)">  
          <option><xsl:value-of select="."/></option>  
        </xsl:for-each>  
      </select>  
    </xsl:template>
    

    Ergebnis jeweils:

    <select>  
      <option>a</option>  
      <option>b</option>  
      <option>c</option>  
    </select>
    

    Grüße,
    Thomas