您能告诉我如何使用变量在XSLT中减去值?
这是我的代码:
<xsl:variable name="currentCurpg" select="1"/>
<xsl:variable name="tCurpg" select="($currentCurpg-1)"/>
变量tCurpg
应为zero
或0
。
为什么我会出错?
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<hmtl>
<head>
<title>New Version!</title>
</head>
<xsl:variable name="currentCurpg" select="1"/>
<xsl:variable name="tCurpg" select="($currentCurpg-1)"/>
<xsl:value-of select="$tCurpg"/>
</hmtl>
</xsl:template>
</xsl:transform>
我期望输出zero
。
问题是连字符在变量名称中有效,因此当您执行此操作时...
<xsl:variable name="tCurpg" select="($currentCurpg-1)"/>
实际上是在寻找一个名为 currentCurpg-1
的变量。
而是将其更改为...
<xsl:variable name="tCurpg" select="$currentCurpg - 1"/>
查看您的代码,仅在HTML中的XSLT语句中不需要围绕变量的卷曲{}
eg div title="{$currentCurpg}">
所以在您的代码中您需要
<xsl:for-each select="ul/li[position() >= (last()-$currentCurpg) and position() <= last()-1]">
更新根据您的更新代码,您需要删除()并在变量和-1之间放置空格,如
<xsl:variable name="tCurpg" select="$currentCurpg - 1"/>
您的select
属性值ul/li[position() >= last()-{$currentCurpg} and position() <= last()-1]
无效。在XSLT属性中,您可以直接使用XSLT变量,因此不应存在卷曲括号。换句话说,使用ul/li[position() >= last()-$currentCurpg and position() <= last()-1]
。
另外,在<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
中,doctype-public
的正确值是about:legacy-compat
;参见HTML§12.1.1:Doctype。
和声明omit-xml-declaration="yes"
对于HTML来说毫无意义,因为使用method="html"
生成的HTML不是XML,因此永远不会有XML声明。
编辑:OP显然最初链接到错误的代码,该代码也有错误。