XSLT 1.0 を使用string()
しているため、テストを実行するために使用できます。
スタイルシートの例を次に示します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:variable name="foo" select="bar"/>
<results>
<xsl:choose>
<xsl:when test="string($foo)">
<foo>DEFINED</foo>
</xsl:when>
<xsl:otherwise>
<foo>NOT DEFINED</foo>
</xsl:otherwise>
</xsl:choose>
</results>
</xsl:template>
</xsl:stylesheet>
空白は折りたたまれているため、<bar> </bar>
false が返されることに注意してください。また、string()
変数の代わりに要素を直接テストするときにも機能します。
入力/出力の例を次に示します。
入力
<test>
<bar/>
</test>
また
<test>
<bar></bar>
</test>
また
<test>
<bar> </bar>
</test>
出力
<foo>NOT DEFINED</foo>
入力
<test>
<bar>x</bar>
</test>
出力
<foo>DEFINED</foo>
XSLT 2.0 を使用できる場合は、変数を として宣言xs:string
し、テストで変数名を使用するだけです ( test="$foo"
)。
例:
<xsl:stylesheet version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:variable name="foo" select="bar" as="xs:string"/>
<results>
<xsl:choose>
<xsl:when test="$foo">
<foo>DEFINED</foo>
</xsl:when>
<xsl:otherwise>
<foo>NOT DEFINED</foo>
</xsl:otherwise>
</xsl:choose>
</results>
</xsl:template>
</xsl:stylesheet>