如何减去xslt中的值?

时间:2017-02-23 09:09:49

标签: jquery xml xslt xslt-1.0

你能告诉我如何使用变量减去xslt中的值吗?

这是我的代码:

<xsl:variable name="currentCurpg" select="1"/>
<xsl:variable name="tCurpg" select="($currentCurpg-1)"/>

变量tCurpg应为zero0

为什么我收到错误?

<?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

3 个答案:

答案 0 :(得分:5)

问题是连字符在变量名中有效,所以当你这样做时......

<xsl:variable name="tCurpg" select="($currentCurpg-1)"/>

它实际上正在寻找名为currentCurpg-1的变量。

而是将其更改为此...

<xsl:variable name="tCurpg" select="$currentCurpg - 1"/>

答案 1 :(得分:0)

您的select属性值ul/li[position() &gt;= last()-{$currentCurpg} and position() &lt;= last()-1]无效。在XSLT属性中,您可以直接使用XSLT变量,因此不应存在大括号。换句话说,请使用ul/li[position() &gt;= last()-$currentCurpg and position() &lt;= 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() &gt;= (last()-$currentCurpg) and position() &lt;= last()-1]">

<强>更新 根据您更新的代码,您需要删除()并在变量和-1之间放置空格,如此

 <xsl:variable name="tCurpg" select="$currentCurpg - 1"/>