次のテンプレートを実行しようとしています。
<xsl:template match="*[starts-with(., 'ATTITUDE_')]/text()">
<xsl:variable name="ElementName" select="local-name()"/>
<xsl:variable name="vVal" select= "$vAttitudes[. = substring-after(current(), '_')]/@val"/>
<xsl:choose>
<xsl:when test="contains($ElementName, 'Refuse')">
<xsl:value-of select="civf:book-capitalise($vAttitudes[@val = $vVal+1])"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="civf:book-capitalise($vAttitudes[@val = $vVal])"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
したがって、前提は、要素の名前を見つけ、その名前に「拒否」というテキストが含まれている場合は「doTheThing」+1、それ以外の場合は単に「doTheThing」です。ただし、このテストは常に失敗するため、要素の名前に「Refuse」が含まれていても +1 が呼び出されることはありません。local-name だけを出力すると、空にもなります。local-name() がここで機能していないように見えるのはなぜですか?
以前、テンプレートを次のように開始しようとしました。
<xsl:template match="*[contains(., 'Refuse')]/name()">
しかし、Saxon は、マッチ シーケンスで実行する関数が多すぎると不満を漏らしました。
XSLTについてあまり詳しくないことをあらかじめお詫び申し上げます。