0

ここで問題が発生しました。再帰実行中の合計が xsl テンプレートに加算されません。以下は、私の xsl と xml のコードです。

XML:

 </xsl:for-each-group>
          Subtotal:
          <td>
          <xsl:for-each-group select="current-group()" group by="@ItemNumber">
           <xsl:sort select="current-grouping-key()"/>
            <xsl:call-template name="count_subtotal">
            <xsl:with-param name="cur_grp_qty" select="sum(current-group()/Quantity)"/>
             <xsl:with-param name="cur_grp_up" select="distinct-values(current-group()/UnitPrice)"/>
             </xsl:call-template>
              </xsl:for-each-group>
  </xsl:for-each-group>


<xsl:template name="count_subtotal">
      <xsl:param name="total" select="0"/>
      <xsl:param name="cur_grp_qty"/>
      <xsl:param name="cur_grp_up"/>
      <xsl:choose>
         <xsl:when test="$cur_grp_qty">
            <xsl:variable name="first_total" select="$cur_grp_qty[1]*$cur_grp_up[1]"/>
            <xsl:call-template name="count_subtotal">
               <xsl:with-param name="cur_grp_qty" select="$cur_grp_qty[position() &gt; 1]"/>
               <xsl:with-param name="total" select="$first_total+$total"/>
            </xsl:call-template>
         </xsl:when>
         <xsl:otherwise>
            <xsl:value-of select="round($total)"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>

これが XML ファイルです。

<Items>
    <Item ItemNumber="1">
        <ProductName>c</ProductName>
        <ProviderName>c</ProviderName>
        <Quantity>2</Quantity>
        <UnitPrice>39</UnitPrice>
    </Item>
    <Item ItemNumber="2">
        <ProductName>b</ProductName>
        <ProviderName>b</ProviderName>
        <Quantity>1</Quantity>
        <UnitPrice>3</UnitPrice>
      </Item>
      <Item ItemNumber="3">
        <ProductName>abt</ProductName>
        <ProviderName>bd</ProviderName>
        <Quantity>1</Quantity>
        <UnitPrice>12</UnitPrice>
      </Item>
      <Item ItemNumber="4">
        <ProductName>a</ProductName>
        <ProviderName>a</ProviderName>
        <Quantity>1</Quantity>
        <UnitPrice>3</UnitPrice>
      </Item>
      <Item ItemNumber="5">
        <ProductName>ab</ProductName>
        <ProviderName>cd</ProviderName>
        <Quantity>2</Quantity>
        <UnitPrice>1</UnitPrice>
      </Item>
      <Item ItemNumber="6">
        <ProductName>sdf</ProductName>
        <ProviderName>bfd</ProviderName>
        <Quantity>1</Quantity>
        <UnitPrice>12</UnitPrice>
      </Item>

そして、欲望のhtmlページは次のようなものです:

ここに画像の説明を入力 あなたの助けは大歓迎です

4

2 に答える 2

0

とにかく、出力を生成するために新しい XSLT を作成しました。見てください:

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

  <xsl:output indent="yes"/>

  <xsl:template match="/">
    <html>
      <head/>
      <body>
        <table>
          <thead>
            <tr>
              <th>
                <xsl:text>Item Number</xsl:text>
              </th>
              <th>
                <xsl:text>Quantity</xsl:text>
              </th>
              <th>
                <xsl:text>Unit Price</xsl:text>
              </th>
              <th>
                <xsl:text>Total</xsl:text>
              </th>
            </tr>
          </thead>
          <tbody>
            <xsl:for-each select="//Item">
              <tr>
                <td>
                  <xsl:value-of select="ProductName"/>
                </td>
                <td>
                  <xsl:value-of select="Quantity"/>
                </td>
                <td>
                  <xsl:value-of select="UnitPrice"/>
                </td>
                <td>
                  <xsl:value-of select="sum(Quantity * UnitPrice)"/>
                </td>
              </tr>
            </xsl:for-each>
            <tr colspan="3">
              <xsl:value-of select="sum(for $x in //Item return ($x/Quantity * $x/UnitPrice))"/>
            </tr>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>
于 2013-05-09T08:50:42.370 に答える