我正在尝试运行以下模板:
<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”。但是,此测试总是失败,因此即使元素名称中有“拒绝”,也不会调用 +1。如果我只输出本地名称,那么我也会变空。为什么 local-name() 似乎在这里不起作用?
我之前确实尝试过使用以下方法启动模板:
<xsl:template match="*[contains(., 'Refuse')]/name()">
但 Saxon 抱怨我在匹配序列中运行了太多函数。
对于对 XSLT 不太了解,我提前道歉。