2017-03-07 5 views
0

저는 XSLT를 처음 사용하고 현재 문제에 직면 해 있습니다. Stackflow (Muenchian 메서드가 일반적인 그룹 메서드 인 것 같아 보인다)에서 일부 검색을 수행했지만 게시 된 아이디어 중 일부는 아직 모방 한 것처럼 보일 수 없습니다.ID로 그룹화하고 합계 금액을 XSLT로

그래서 나는 XSLT에 코드를 작성하여 공급자 ID가 동일한 지 확인하기 위해 모든 행을 읽는 시스템을 사용하고 있는데, 사실이라면이 코드를 한 줄로 집계합니다. 금액을 합산하십시오. 사실이 아니라면 ID가있는 줄을 시작하고 금액을 합계해야합니다. 내가 XML 내 현재의 데이터 파일이 아래

= '1.0'XML 버전을 사용하고 있습니다 :

<data> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>744.04</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>105.09</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>1366.24</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>485.71</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11112</column1> 
    <column2>Ever</column2> 
    <column3>459.60</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11112</column1> 
    <column2>Ever</column2> 
    <column3>409.14</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11112</column1> 
    <column2>Ever</column2> 
    <column3>397.12</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11113</column1> 
    <column2>GE</column2> 
    <column3>1425</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11114</column1> 
    <column2>Husky</column2> 
    <column3>-215.14</column3> 
    <column4>USD</column4> 
</row> 
<row> 
    <column1>06-11114</column1> 
    <column2>Husky</column2> 
    <column3>2015</column3> 
    <column4>USD</column4> 
</row> 
<row> 
    <column1>06-11114</column1> 
    <column2>Husky</column2> 
    <column3>11195.34</column3> 
    <column4>USD</column4> 
</row> 
</data> 

출력 내가 XSLT를 실행 한 후 달성하고자하는 것은

06 -11111 | CP | 2701.08

06-11112 | 적 | 1265.86

06-11113 | GE | 1425

06-11114 | 허스키 | 12995.20

나에게 도움이되는 어떤 도움이라도 환상적입니다!

+0

입력 내용이 XML 인 경우 XML로 표시하십시오. XSLT 1.0에서 그룹화하려면 여기에서 시작하십시오. http://www.jenitennison.com/xslt/grouping/muenchian.html –

+0

답장을 보내 주셔서 감사합니다 michael.hor257k! XML 형식 – Echan

+0

을 제공하기 위해 내 질문을 편집했습니다. 대답은 이전에 언급 한 기사에 있습니다. Muenchian 그룹화의 많은 예에서 여기에 게시되었습니다. –

답변

0

다음은 Muenchian 메서드를 사용한 그룹입니다. 소수점 수를 기준으로 숫자의 서식을 올바르게 지정하는 방법을 알려 드리겠습니다. 제한적이며 까다 롭고 프로그래밍을 푸시하지 않기 때문에 일반적으로 이것을 사용하지 마십시오. 그러나 그것은 오늘 당신을 위해 일할 것입니다.

<xsl:template match="@* | node()"> 
    <xsl:apply-templates select="@* | node()"/> 
</xsl:template> 

<xsl:key name="rows" match="row" use="concat(column1, '||', column2)" /> 

<xsl:template match="data"> 
    <xsl:for-each select="row[generate-id(.) = generate-id(key('rows', concat(column1, '||', column2))[1])]"> 
    <xsl:sort select="column1" data-type="text" order="ascending"/> 
    <xsl:sort select="column2" data-type="text" order="ascending"/> 

    <xsl:value-of select="concat(column1,'|',column2,'|')"/> 

    <xsl:variable name="mySum"> 
     <xsl:value-of select="sum(key('rows', concat(column1, '||', column2))/column3)"/> 
    </xsl:variable> 

    <xsl:value-of select="format-number($mySum,'#,##0.00')"/> 

    <xsl:value-of select="'&#xD;&#xA;'"/> 
    </xsl:for-each> 
</xsl:template> 
+0

도움을 청합니다 @ Bluewood66! 크게 감사드립니다. – Echan