テンプレート内に次のような xsl があります。
<xsl:variable name="current_x" select="position_x" />
<xsl:variable name="current_y" select="position_y" />
<xsl:if test="units_display='true'">
<xsl:call-template name="DisplayBox">
<xsl:with-param name="value"><xsl:value-of select="units" /></xsl:with-param>
<xsl:with-param name="text" select="'Units'" />
</xsl:call-template>
</xsl:if>
<xsl:if test="sensor_display='true'">
<xsl:call-template name="DisplayBox">
<xsl:with-param name="value"><xsl:value-of select="sensor" /></xsl:with-param>
<xsl:with-param name="text" select="'Type'" />
</xsl:call-template>
</xsl:if>
私の呼び出しテンプレートは次のようなものです:
<xsl:template name="DisplayBox">
<xsl:param name="current_x" select="0"/>
<xsl:param name="current_y" select="0"/>
<xsl:param name="value" />
<xsl:param name="text" />
<g transform="translate({$current_x},{$current_y})">
<rect x="20" y="150" width="220" height="20" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="25" y="168" font-family="arial" font-size="20px" fill="black">
<xsl:value-of select="$value"/>
</text>
<line x1="90" y1="150" x2="90" y2="170" stroke="black" stroke-width="1" />
<text x="95" y="168" font-family="arial" font-size="20px" fill="black">
<xsl:value-of select="$text" />
</text>
</g>
</xsl:template>
これは、長方形の中に「値」と「テキスト」の値を表示します。ただし、どうすればよいか分からないのは、それらを重ねて書かないことです。test="xxxx_display=true の場合、current_y の値を増やしたいのですが、これを達成する方法がわかりません。
call-template の外で current_y の値を増やす方法がわかりません。
編集:
call-template での transform translate の使用に問題があるようです。それらの値を無視しているようです。
コードを次のように変更しました。
<xsl:if test="units_display='true'">
<g transform="translate({position_x},{position_y})">
<xsl:call-template name="DisplayBox">
<xsl:with-param name="value">
<xsl:value-of select="units" />
</xsl:with-param>
<xsl:with-param name="text" select="'Units'" />
</xsl:call-template>
</g>
</xsl:if>
<xsl:if test="sensor_display='true'">
<g transform="translate({position_x},{position_y + 20})">
<xsl:call-template name="DisplayBox">
<xsl:with-param name="value">
<xsl:value-of select="sensor" />
</xsl:with-param>
<xsl:with-param name="text" select="'Type'" />
</xsl:call-template>
</g>
</xsl:if>
しかし、「position_y + 20」をハードコーディングしたくありません。最初の値の表示が true でない場合は 2 番目の値を position_y に置き、最初の値の表示が true の場合は 2 番目の値を position_y + 20 にします。これはどういうわけか可能でなければなりません。