0

私はしばらくこれで壁に頭をぶつけていました。私たちのアプリケーションは、別のシステムからの複雑な構造の XML 請求書を処理します。請求書には、さまざまなカウントを含む情報の行が含まれています。これらのカウントには、値が含まれる場合と含まれない場合があります。書類一式は有料です。単位料金を計算する必要があります。式は、合計コストをカウントの合計で割ったものになります。

私は、XSLT1.0 での合計に関して、親切に他の人から提供された例に取り組んできました。xsl:call-template を使用してカウントの合計を取得できますが、結果を適用して単価を計算する方法がわかりません。

サンプル XML

<Document>
    <Row>
        <Count1>
            <Value>10</Value>
        </Count1>
        <Count2>
            <Value/>
        </Count2>
    </Row>
    <Row>
        <Count1>
            <Value>5</Value>
        </Count1>
        <Count2>
            <Value>6</Value>
        </Count2>
    </Row>
    <Row>
        <Count1>
            <Value>2</Value>
        </Count1>
        <Count2>
            <Value>3</Value>
        </Count2>
    </Row>
    <Charge>
        <Value>260</Value>
    </Charge>
</Document>

次の XML 出力を取得する方法がわかれば、おそらく何が必要かがわかります。

<Document>
    <Row>
        <Total>10</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>11</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>15</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
</Document>

よろしくお願いします

4

1 に答える 1

0

sum()次のように、必要な値を呼び出すだけです。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/Document">
    <Document>
        <xsl:apply-templates select="Row"/>
    </Document>
  </xsl:template>
  <xsl:template match="Row">
    <Row>
        <Total>
            <xsl:value-of select="sum(./*[Value&gt;0]/Value)"/>
        </Total>
        <UnitPrice>10</UnitPrice>
    </Row>
  </xsl:template>
</xsl:stylesheet>

これにより、次の出力が得られます。

<Document>
    <Row>
        <Total>10</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>11</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
    <Row>
        <Total>5</Total>
        <UnitPrice>10</UnitPrice>
    </Row>
</Document>
于 2013-11-01T01:11:07.980 に答える