你能告诉我如何使用变量减去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
。
答案 0 :(得分:5)
问题是连字符在变量名中有效,所以当你这样做时......
<xsl:variable name="tCurpg" select="($currentCurpg-1)"/>
它实际上正在寻找名为currentCurpg-1
的变量。
而是将其更改为此...
<xsl:variable name="tCurpg" select="$currentCurpg - 1"/>
答案 1 :(得分:0)
您的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: The DOCTYPE。
声明omit-xml-declaration="yes"
对于HTML来说毫无意义,因为使用method="html"
生成的HTML不是XML,因此永远不会有XML声明。
编辑:OP显然最初链接到错误的代码也有错误。
答案 2 :(得分:0)
查看你的代码,只在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"/>