2013-03-19 3 views
2

XSL v1.0에서 양수 값과 음수 값을 별도로 합산하려고합니다.음수와 양수 값을 따로 따로 더하기

나는 다음과 같은 XML을 가지고

<Billing_Statements> 
    <Statement_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>XX</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>XX</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>XX</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>XX</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
    </Statement_Details> 
</Billing_Statements> 

XX는 양 또는 음의 값을가 될 수 있습니다.

각 Statement_Details에 대해 모든 Invoice_Detail 노드에 대해 양수 값의 합계와 음수 값 합계를 먼저 출력해야합니다.

<xsl:value-of select="sum(Invoice_Details/Meter_Details[Consumption &lt; 0])" /> 

많은이의 변화와 모두 상관없이 0의 합을 반환하지 : 나는 시도 순간

.

Meter_Details 내를위한 각 섹션이로 완벽하게 작동 노드에서 다른 모든 정보를 수집 : 음성 또는 양성 값

<xsl:for-each select="Invoice_Details/Meter_Details[Consumption &lt; 0]"> 

그리고 선택 노드 만합니다. 왜 이것이 sum()에 대해 작동하지 않습니까?

저는 여기 XSL을 사용하는 데 어려움을 겪고 있습니다.

답변

0

사용 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="Statement_Details"> 

Statement <xsl:value-of select="position()"/> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="Invoice_Details"> 
    Invoice <xsl:value-of select="position()"/> 
    Positive: <xsl:value-of select="sum(*/*[. >=0])"/> 
    Negative: <xsl:value-of select="sum(*/*[not(. >=0)])"/> 
</xsl:template> 
</xsl:stylesheet> 
:

sum(*/*/*[. >=0]) 

하고 여기에

sum(*/*/*[not(. >=0)]) 

이 두 상대 XPath 표현식을 사용하여 완전한 변화이다 53,691,363,210

이 변환은 다음의 XML 문서 (원하는 구조를 가짐)에 적용되는 경우 :

<Billing_Statements> 
    <Statement_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>-3</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>5</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>8</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>-12</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>22</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>3</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>4</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>-5</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
    </Statement_Details> 
    <Statement_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>-13</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>25</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>77</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>-15</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>31</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>-3</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
     <Invoice_Details> 
      <Meter_Details> 
       <Consumption>-87</Consumption> 
      </Meter_Details> 
      <Meter_Details> 
       <Consumption>54</Consumption> 
      </Meter_Details> 
     </Invoice_Details> 
    </Statement_Details> 
</Billing_Statements> 

가 원하는 정확한 결과가 생성된다 :

Statement 1 
    Invoice 1 
    Positive: 5 
    Negative: -3 
    Invoice 2 
    Positive: 8 
    Negative: -12 
    Invoice 3 
    Positive: 25 
    Negative: 0 
    Invoice 4 
    Positive: 4 
    Negative: -5 

Statement 2 
    Invoice 1 
    Positive: 25 
    Negative: -13 
    Invoice 2 
    Positive: 77 
    Negative: -15 
    Invoice 3 
    Positive: 31 
    Negative: -3 
    Invoice 4 
    Positive: 54 
    Negative: -87 
+0

감사합니다 그 레벨에서 모든 인스턴스가 합쳐지기는하지만 – user2184903

+0

@user2184903으로 업데이트됩니다. –

+0

고마워요! 내 프로젝트에는 더 많은 것이 있지만 사용하는 것은 다음과 같습니다. 'sum (../ Meter_Details/Consumption [not (.> = 0)]) ' 나를 위해 일하는 것 같습니다. – user2184903

관련 문제