为什么local-name()没有返回任何内容?

时间:2012-07-18 06:49:57

标签: xslt

我正在尝试运行以下模板:

<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不太了解。

1 个答案:

答案 0 :(得分:1)

我认为local-name()不起作用,因为您匹配文本节点(/text()属性中的match),而文本节点没有本地名称。

我不确定你要做什么,但我认为你不想匹配/text()而是匹配整个元素,然后获得text()

或者,您可以尝试使用local-name(..)获取父节点的名称,但我不确定。