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インデックス開始