0

次のテンプレートを実行しようとしています。

<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についてあまり詳しくないことをあらかじめお詫び申し上げます。

4

1 に答える 1

1

local-name()テキストノード(属性内)と一致/text()してmatchおり、テキストノードにはローカル名がないため、機能しないと思います。

あなたが何をしようとしているのかはわかりませんが、実際に一致させたいとは思いません/text()が、代わりに要素全体を取得し、text()後で取得します。

または、親ノードの名前を取得するために使用することもできますlocal-name(..)が、それについてはわかりません。

于 2012-07-18T07:02:27.643 に答える