tohokuaikiのチラシの裏

技術的ネタとか。

XSL2.0のindex-ofとtokenize

XSL2.0のindex-ofとtokenizeをつかおうとしてはまったこと

tokenizeをvalue-ofで受けてはいけない

<xsl:variable name="excludes" as="xs:string*">
	<xsl:value-of select="tokenize('foo,bar,baz', ',')"/>
</xsl:variable>

ってやってて$excludesに全然sequenceが入って来なくてぬがーっておもってたんだけど、

<xsl:variable name="excludes" as="xs:string*">
	<xsl:sequence select="tokenize('foo,bar,baz', ',')"/>
</xsl:variable>

ってやらないとダメじゃんね。。。

index-ofは、無い場合に0を返さない

JavaScriptっぽく*1

<xsl:if test="index-of($excludes, name()) > 0">

ってやってて、ぬがーっておもってたんだけど、どうも無い場合は0を返さないみたい。xsl:messageすると空文字になる。

そこで、

<xsl:if test="empty(index-of($excludes, name()))">

っていうようにemptyを付けて判定判定。

*1:ただし、XSLのindex-ofは1インデックス開始