XSLで値がnullまたは空かどうかを確認するにはどうすればよいですか?
たとえば、categoryName
空ですか?
これはおそらく最も単純なXPath式です(受け入れられた答えの1つは、反対のテストを提供し、否定するとより長くなります)。
not(string(categoryName))
説明:
not()
上記の関数の引数は、コンテキスト項目false()
のcategoryName
子(「null」)がない場合、または(単一の)categoryName
子に文字列値(空の文字列)がある場合です。
私は構成を選択するときに使用しています。
例えば:
<xsl:choose>
<xsl:when test="categoryName !=null">
<xsl:value-of select="categoryName " />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="other" />
</xsl:otherwise>
</xsl:choose>
XSLT 2.0での使用:
<xsl:copy-of select="concat(categoryName, $vOther[not(string(current()/categoryName))])"/>
ここに完全な例があります:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOther" select="'Other'"/>
<xsl:template match="/">
<xsl:copy-of select="concat(categoryName,$vOther[not(string(current()/categoryName))])"/>
</xsl:template>
</xsl:stylesheet>
この変換が次のXMLドキュメントに適用される場合:
<categoryName>X</categoryName>
望ましい、正しい結果が生成されます:
X
このXMLドキュメントに適用した場合:
<categoryName></categoryName>
またはこれについて:
<categoryName/>
またはこれで
<somethingElse>Y</somethingElse>
正しい結果が生成されます:
Other
同様に、次のXSLT 1.0変換を使用します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOther" select="'Other'"/>
<xsl:template match="/">
<xsl:copy-of select=
"concat(categoryName, substring($vOther, 1 div not(string(categoryName))))"/>
</xsl:template>
</xsl:stylesheet>
注:条件文はまったく使用されません。この素晴らしいPluralsightコースで条件付き構成を回避することの重要性について詳しく学んでください。
「.NETの戦術的なデザインパターン:制御フロー」