<xsl:template match="@one-of" name="parse-one-of">
<xsl:param name="list" select="string(.)" />
<xsl:if test="$list">
<xsl:variable name="value"
select="substring-before($list, '|')" />
...
<!-- do something with $value -->
...
<!-- recursive call -->
<xsl:call-template name="parse-one-of">
<xsl:with-param name="list"
select="substring-after($list, '|')" />
</xsl:call-template>
</xsl:if>
</xsl:template>
In XSLT 2.0:
<xsl:for-each select="tokenize(@one-of, '|')">
<!-- do something with . -->
</xsl:for-each>
4 of 12 |