2016-09-21 23 views
0

合計を計算し、どの要素を合計に含めるべきかを知るためには、いくつかの比較が必要です。XSL - 計算された金額と比較の合計

はのは、私が総要素内の各関連するレートを乗じた各金額の合計を表示したいと思い、次のXML

<REF> 
    <amount>3</amount> 
    <rate>7</rate> 
</REF> 
<A> 
    <amount>10</amount> 
    <rate>4</rate> 
</A> 
<A> 
    <amount>-21</amount> 
    <rate>2</rate> 
</A> 
<B> 
    <amount>8</amount> 
    <rate>1</rate> 
</B> 
<C> 
    <amount>7</amount> 
    <rate>32</rate> 
</C> 

を見てみましょう。 そして、合計を2つの要素に分割したいと思います:NegativeTotalとPositiveTotal。 PostiveTotalには、値がREFオブジェクトの(amount * rate)より大きい場合、SUM((amount * rate))が入ります。 NegativeTotalは、値が(amount * rate) REFオブジェクトの割合))

それは、以下の出力が得られます

<Total> 
    <PositiveTotal> 
     264 <!-- 40 + 224 --> 
    </PositiveTotal> 
    <NegativeTotal> 
     -34 <!-- -42 + 8 --> 
    </NegativeTotal> 
</Total> 

は、それが情報技術的な制限について 可能だ場合は私に知らせてください:XSLTを1.0

おかげで、事前に

よろしく、

答えて

1

私はあなたがこのようにそれを行うことをお勧め:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common" 
extension-element-prefixes="exsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/root"> 
    <!-- first pass --> 
    <xsl:variable name="summands-rtf"> 
     <xsl:for-each select="*"> 
      <value> 
       <xsl:value-of select="amount * rate" /> 
      </value> 
     </xsl:for-each> 
    </xsl:variable> 
    <xsl:variable name="summands" select="exsl:node-set($summands-rtf)/value" /> 
    <!-- get the threshold --> 
    <xsl:variable name="threshold" select="REF/amount * REF/rate" /> 
    <!-- output --> 
    <Total> 
     <PositiveTotal> 
      <xsl:value-of select="sum($summands[. > $threshold])" /> 
     </PositiveTotal> 
     <NegativeTotal> 
      <xsl:value-of select="sum($summands[. &lt; $threshold])" /> 
     </NegativeTotal> 
    </Total> 
</xsl:template> 

</xsl:stylesheet> 

(単一のルート要素を持つ)整形 XML入力に適用されます:

<root> 
    <REF> 
     <amount>3</amount> 
     <rate>7</rate> 
    </REF> 
    <A> 
     <amount>10</amount> 
     <rate>4</rate> 
    </A> 
    <A> 
     <amount>-21</amount> 
     <rate>2</rate> 
    </A> 
    <B> 
     <amount>8</amount> 
     <rate>1</rate> 
    </B> 
    <C> 
     <amount>7</amount> 
     <rate>32</rate> 
    </C> 
</root> 

結果は次のようになります

<?xml version="1.0" encoding="UTF-8"?> 
<Total> 
    <PositiveTotal>264</PositiveTotal> 
    <NegativeTotal>-34</NegativeTotal> 
</Total> 

注意が閾値より上でも下にもないとしてREF量と速度の積は、2個の合計のいずれかに含まれていないこと。同様に、他の製品が閾値に等しくなった場合。それも除外されます。

関連する問題