2017-02-23 15 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

はそれがhttp://xsltransform.net/bwdwsJ/5 – user944513

+0

あなたが持っているXSLTを含めるようにあなたの質問を編集してください '0'値を示していない参照しますトラブル。それでもXSLTransform.netにリンクするのは問題ありませんが、Webサイトは頻繁に利用できなくなり、質問に答えることが不可能になります。ありがとう。 –

+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を参照してください。

method="html"で生成されたHTMLはXMLではないため、XML宣言は決してないため、omit-xml-declaration="yes"と宣言することはHTMLを意味しません。

編集:OPは明らかに当初は間違ったコードにもリンクしていました。あなたのコードを見てみると

+0

私はなぜそれが動作していないと言っていますhttp://xsltransform.net/bwdwsJ/4 – user944513

+0

@ user944513変数とマイナス記号の間にスペース文字を入れていないので、マイナス記号が解釈されているので機能しませんハイフンとして。したがって、変数は '$ currentCurpg'ではなく' $ currentCurpg-1'(存在しません)という名前になります。 –

+0

@ user944513また、 'hmtl'は' html'でなければなりません。 –

0

、カーリーは、{}あなたの変数の周りにブレースので、あなたのコードの中であなたがを更新

<xsl:for-each select="ul/li[position() &gt;= (last()-$currentCurpg) and position() &lt;= last()-1]"> 

を必要とするだけのhtml

eg div title="{$currentCurpg}"> 

にXSLT文で必要とされていません あなたの更新されたコードに基づいて、()と変数の間にスペースを入れて、このような - 1を置く必要があります

それは文字通りcurrentCurpg-1という名前の変数を探している
+0

plsが動作しない理由を確認してください。http://xsltransform.net/bwdwsJ/4 – user944513

+0

更新された回答ごとに変数名と-1の間にスペースを入れて置く必要があります – RT72

3

問題はハイフンが変数名に有効であるということですので、あなたがこれを行うとき...

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

代わりに、このように変更し...

​​
関連する問題