- PR -

変数に前の値を保持する方法

1
投稿者投稿内容
tama
会議室デビュー日: 2004/09/14
投稿数: 1
投稿日時: 2004-09-14 21:26
ある変数に対しテンプレートのデータを読み込むごとに1ずつ加算していく方法はあるのでしょうか
たとえば、普通の言語とかで例えると

A=0
For(i=0; i<=100; i++){
 A=A+1
}

とするとA値が1〜100まで加算していくようなやり方はあるのでしょうか。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-14 21:49
これは何に対しての質問でしょうか。察するにXSLT?
TAKABE
常連さん
会議室デビュー日: 2003/05/14
投稿数: 43
投稿日時: 2004-09-16 09:41
 このご質問をXSLTだと仮定して話をさせていただきます。
 まず、多くのプログラミング言語では「変数」なるものは、値を格納するための一種の「場所」「箱」のようなものです。ですから、「A=A+1」などといった「Aの値に1を加えたものを、再びAに入れる」といった書き方が成り立ちます。
 ところがXSLTにおける変数はこのような「場所」「箱」のようなものではありません。XSLTにおける変数は、ある値に付けられた名前でしかなく、いわば、名前を書いたラベルなり付箋なりを、ある値に貼り付けるようなものが変数なのです。「変数」という概念そのものに根本的な差異があることにまず注意する必要性があります。

 さて、XSLTにおける変数は「値に名前を書いたラベルなり付箋なりを貼り付けるようなもの」ですから、「A=A+1」のような「Aの値に1を加えたものを、再びAに入れる」といった操作が本質的にできません。それでは100回繰り返したいような場合にはどうすれば良いかというと、以下のように「再帰処理」を使うことになります。

【sample1.xml】
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="sample1.xsl"?>
<a>0</a>

【sample1.xsl】
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="a">
 <xsl:call-template name="for">
  <xsl:with-param name="i" select="1" />
  <xsl:with-param name="A" select="." />
 </xsl:call-template>
</xsl:template>

<xsl:template name="for">
 <xsl:param name="i" />
 <xsl:param name="A" />
 <xsl:variable name="x" select="$i + 1" />
 <xsl:variable name="a1" select="$A + 1" />
 <xsl:choose>
  <xsl:when test="$x <= 100">
   <xsl:call-template name="for">
    <xsl:with-param name="i" select="$x" />
    <xsl:with-param name="A" select="$a1" />
   </xsl:call-template>
  </xsl:when>
 <xsl:otherwise>
  <xsl:value-of select="$a1" />
 </xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>
1

スキルアップ/キャリアアップ(JOB@IT)