attribute aufsplitten
Dieter B.
- xsl
0 ThomasM
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?
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