我正在尝试运行以下模板:
<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()">
但萨克森抱怨我在比赛顺序中运行了太多功能。
我提前道歉,因为对XSLT不太了解。
答案 0 :(得分:1)
我认为local-name()
不起作用,因为您匹配文本节点(/text()
属性中的match
),而文本节点没有本地名称。
我不确定你要做什么,但我认为你不想匹配/text()
而是匹配整个元素,然后获得text()
。
或者,您可以尝试使用local-name(..)
获取父节点的名称,但我不确定。