xslt为变量分配路径,稍后调用该变量

时间:2015-11-19 12:18:23

标签: xml xslt

我是XSLT的新手,我在为变量分配路径时遇到了麻烦。

说我有以下示例xml ......

<CINEMA>
    <FILMS>
       <FILM_NAME>SomeFilmName</FILM_NAME>
       <FILM_NAME>SomeOtherFilmName</FILM_NAME>
    </FILMS>
</CINEMA>

我宣布以下变量......

<xsl:variable name="POS1" select="child::FILMS/descendant::FILM_NAME[1][. = 'SomeFilmName']"/>

如果我使用以下测试调用变量,我没有收到任何结果,因为它似乎没有正确评估

<xsl:template match="CINEMA">
<xsl:if test="$POS1">
.....Do some processing here if the above test evaluates to true........
</xsl:if>
</xsl:template>

但是,如果我在没有调用变量的情况下指定测试中的实际路径,它似乎正确评估。

有人可以解释我想要的是什么吗?如果是这样,任何人都可以在使用变量时识别出错误。

提前致谢,我们非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果该变量是全局变量,那么您需要使用绝对路径<xsl:variable name="POS1" select="/CINEMA/FILMS/descendant::FILM_NAME[1][. = 'SomeFilmName']"/>或相对于根节点<xsl:variable name="POS1" select="CINEMA/FILMS/descendant::FILM_NAME[1][. = 'SomeFilmName']"/>的一个。

如果上下文节点是CINEMA元素,则当前尝试才有意义,如

<xsl:template match="CINEMA">
<xsl:variable name="POS1" select="child::FILMS/descendant::FILM_NAME[1][. = 'SomeFilmName']"/>
<xsl:if test="$POS1">
.....Do some processing here if the above test evaluates to true........
</xsl:if>
</xsl:template>

当然,在这种情况下,简单地在匹配模式上添加谓词可能更容易

<xsl:template match="CINEMA[FILMS/descendant::FILM_NAME[1][. = 'SomeFilmName']]">
.....Do some processing here if the above test evaluates to true........
</xsl:template>