Мой вход XML похож2 мерная группировка и sumation в XSLT
<Reports>
<Report>
<ReportHeader>
<Name>ABC</Name>
<ReportNo>123</ReportNo>
</ReportHeader>
<ReportLine>
<ReportNo>123</ReportNo>
<LineGroup>XYZ</LineGroup>
<LineAmount>10</LineAmount>
<ReportLine>
<ReportLine>
<ReportNo>123</ReportNo>
<LineGroup>PQR</LineGroup>
<LineAmount>20</LineAmount>
<ReportLine>
<ReportLine>
<ReportNo>123</ReportNo>
<LineGroup>XYZ</LineGroup>
<LineAmount>30</LineAmount>
<ReportLine>
</Report>
<Report>
<ReportHeader>
<Name>DEF</Name>
<ReportNo>456</ReportNo>
</ReportHeader>
<ReportLine>
<ReportNo>456</ReportNo>
<LineGroup>IJK</LineGroup>
<LineAmount>40</LineAmount>
<ReportLine>
<ReportLine>
<ReportNo>456</ReportNo>
<LineGroup>XYZ</LineGroup>
<LineAmount>50</LineAmount>
<ReportLine>
<ReportLine>
<ReportNo>456</ReportNo>
<LineGroup>IJK</LineGroup>
<LineAmount>60</LineAmount>
<ReportLine>
</Report>
</Reports>
Мой выход XML похож
<NewReport>
<Header>
<Name>ABC</Name>
<HeaderNo>456</HeaderNo>
</Header>
<Line>
<LineGroup>XYZ</LineGroup>
<Amount>40</Amount>
</Line>
<Line>
<LineGroup>PQR</LineGroup>
<Amount>20</Amount>
</Line>
</NewReport>
<NewReport>
<Header>
<Name>DEF</Name>
<HeaderNo>456</HeaderNo>
</Header>
<Line>
<LineGroup>IJK</LineGroup>
<Amount>100</Amount>
</Line>
<Line>
<LineGroup>XYZ</LineGroup>
<Amount>50</Amount>
</Line>
</NewReport>
XSL Я использую
<xsl:key name="KLinesByGroup" match="/Reports/Report/ReportLine" use="LineGroup"/>
<xsl:key name="KLinesByReportNo" match="/Reports/Report/ReportLine" use="ReportNo"/>
<xsl:template match="/">
<xsl:for-each select="/ns2:Reports/ns2:Report">
<xsl:variable name="HeaderReportNo"><xsl:value-of select="ReportHeader/ReportNo"/></xsl:variable>
<Header>
<Name><xsl:value-of select="ReportHeader/Name"/></Name>
<HeaderNo><xsl:value-of select="ReportHeader/ReportNo"/></HeaderNo>
<xsl:apply-templates select="key('KLinesByReportNo', $HeaderReportNo)[1]" mode="reportno-mode"/>
</Header>
</xsl:for-each>
</xsl:template>
<xsl:template match="ReportLine" mode="reportno-mode">
<xsl:apply-templates select="key('KLinesByReportNo', ReportNo)[generate-id() = generate-id(key('KLinesByGroup', LineGroup)[1])]" mode="group-mode"/>
</xsl:template>
<xsl:template match="ReportLine" mode="group-mode">
<Line>
<xsl:value-of select="sum(key('KLinesByGroup', LineGroup)/LineAmount)"/>
</Line>
</xsl:template>
Но выход не то, что я ожидаю. Результат, который я получаю, заключается в добавлении всех сумм на уровне группы или линии, но не на уровне линий и групп. Может ли кто-нибудь помочь.
Благодаря
Perfect !!!! Мне пришлось немного подзаработать его для требования к актулу ... но спасибо за код. – user1619873
@ user1619873, добро пожаловать. –