2017-02-23 47 views
1

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

这里是我的代码 http://xsltransform.net/bwdwsJ/3

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

变量tCurpg应该zero [R 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

看到它没有显示'0'值http://xsltransform.net/bwdwsJ/5 – user944513

+0

请编辑您的问题,包括您遇到的XSLT麻烦与。仍然可以链接到XSLTransform.net,但网站经常变得不可用,这将使问题无法回答。谢谢。 –

+0

感谢您编辑您的问题!我认为你已经链接到了xsltransform.net上的错误版本。我认为你需要参考http://xsltransform.net/bwdwsJ/4。 –

回答

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显然最初链接到也有错误的错误代码。在你的代码

+0

我在说为什么它不起作用http://xsltransform.net/bwdwsJ/4 – user944513

+0

@ user944513它不工作,因为你没有在变量和减号之间放置空格字符,所以减号被解释作为连字符。因此你的变量被命名为'$ currentCurpg-1'(不存在),而不是'$ currentCurpg'。 –

+0

@ user944513另外,'hmtl'应该是'html'。 –

0

来看,卷曲{}括号在你的变量在XSLT声明并不只需要在HTML

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"/> 
+0

请检查它为什么不能正常工作http://xsltransform.net/bwdwsJ/4 – user944513

+0

您需要删除()并在变量名和-1之间放置空格,以便更新我的答案 – RT72

3

的问题是,连字符在变量名有效,所以当你做到这一点...

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

它字面上找一个名为currentCurpg-1变量。

相反,它改变这个...

​​