1
Team,Группировка сгруппированных данных и перебор каждых сгруппированных данных в XSLT
Нужна ваша помощь в группировке данных в XSLT.
Требования:
- данные, основанные на report_number
- Group шаг 1 выходных данных на основе program_name
- перебирать каждый из сгруппированных данных и создания XML, как в ожидаемом Group выход
Я могу выполнить первые два шага. Я не в состоянии прийти к логике для шага 3.
Вход:
<?xml version="1.0" ?>
<MTR>
<program>
<program_row>
<report_number>1</report_number>
<program_id>PMP</program_id>
<program_name>Portfolio Manager Program</program_name>
<ssn_tin>1111111111</ssn_tin>
<acct_number>1111111111</acct_number>
<total_value/>
</program_row>
<program_row>
<report_number>1</report_number>
<program_id>PMP</program_id>
<program_name>Portfolio Manager Program</program_name>
<ssn_tin>2222222222</ssn_tin>
<acct_number>2222222222</acct_number>
<total_value/>
</program_row>
<program_row>
<report_number>1</report_number>
<program_id>PMP</program_id>
<program_name>Customer Manager Program</program_name>
<ssn_tin>3333333333</ssn_tin>
<acct_number>3333333333</acct_number>
<total_value/>
</program_row>
<program_row>
<report_number>1</report_number>
<program_id>PMP</program_id>
<program_name>Portfolio Manager Program</program_name>
<ssn_tin>4444444444</ssn_tin>
<acct_number>4444444444</acct_number>
<total_value/>
</program_row>
<program_row>
<report_number>1</report_number>
<program_id>PMP</program_id>
<program_name>Relationship Manager Program</program_name>
<ssn_tin>55555555555</ssn_tin>
<acct_number>55555555555</acct_number>
<total_value/>
</program_row>
<program_row>
<report_number>2</report_number>
<program_id>PMP</program_id>
<program_name>Ringo Manager Program</program_name>
<ssn_tin>6666666666</ssn_tin>
<acct_number>6666666666</acct_number>
<total_value/>
</program_row>
</program>
</MTR>
Ожидаемый результат:
<?xml version="1.0" encoding="UTF-8"?>
<MTR>
<reports>
<report>
<report_number>1</report_number>
<headers>
<header>
<prog_name>Portfolio Manager Program</prog_name>
<acct_no>1111111111,2222222222,55555555555</acct_no>
</header>
<header>
<prog_name>Customer Manager Program</prog_name>
<acct_no>3333333333</acct_no>
</header>
<header>
<prog_name>Relationship Manager Program</prog_name>
<acct_no>4444444444</acct_no>
</header>
</headers>
</report>
<report>
<report_number>2</report_number>
<headers>
<header>
<prog_name>Ringo Manager Program</prog_name>
<acct_no>6666666666</acct_no>
</header>
</headers>
</report>
</reports>
</MTR>
Неполное XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="kGroup" match="program_row" use="report_number"/>
<xsl:key name="progNameGroup" match="program_row" use="program_name"/>
<xsl:template match="MTR">
<MTR>
<xsl:copy-of select="emb_disc" />
<xsl:copy-of select="emb_foot_note" />
<reports>
<xsl:for-each select="program/program_row[generate-id(.) = generate-id(key('kGroup', report_number)[1])]">
<report>
<headers>
<xsl:for-each select="key('kGroup', report_number)[generate-id() = generate-id(key('progNameGroup', program_name)[1])]">
<xsl:for-each select="key('progNameGroup', program_name)">
<header>
<prog_name></prog_name>
<acct_no></acct_no>
</header>
</xsl:for-each>
</xsl:for-each>
</headers>
</report>
</xsl:for-each>
</reports>
</MTR>
</xsl:template>
</xsl:stylesheet>
Большое спасибо. Извините за задержку в принятии ответа. Я хотел бы интегрировать эту логику и полностью проверить, прежде чем принимать. Оно работало завораживающе. – rashpencilbox