0

テンプレート内に次のような 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 にします。これはどういうわけか可能でなければなりません。

4

2 に答える 2

1

current_xパラメータを渡すだけで、次のcurrent_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:with-param name="current_x" select="position_x"/>
    <xsl:with-param name="current_y" select="position_y + 100"/>
  </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:with-param name="current_x" select="position_x"/>
    <xsl:with-param name="current_y" select="position_y + 200"/>
  </xsl:call-template>
</xsl:if>

編集:sensor_display 2 番目のアプローチを使用する場合は、その部分を次のように変更してみてください。

  <xsl:if test="sensor_display='true'">
    <xsl:variable name="offset">
      <xsl:choose>
        <xsl:when test="units_display='true'">20</xsl:when>
        <xsl:otherwise>0</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <g transform="translate({position_x},{position_y + $offset})">
      <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>

ところで、このように質問を言い換える場合は、新しい質問を開始することをお勧めします。

于 2013-09-10T19:47:05.933 に答える