我是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>
但是,如果我在没有调用变量的情况下指定测试中的实际路径,它似乎正确评估。
有人可以解释我想要的是什么吗?如果是这样,任何人都可以在使用变量时识别出错误。
提前致谢,我们非常感谢任何帮助。
答案 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>