2017-02-23 48 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變量。

相反,它改變這個...

​​