Xml 合并母公司及;使用XSLT 1.0将子数据放在一个逗号分隔的排序列中
我想把父母“被保险人”和子女“被保险账户”列在一列;逗号分隔它们,其中InsuredAccnt(在我的XML中为INSA)始终是第一行,其余子InsuredAccounts(在我的XML中为INS1和INS2)需要按“InsuredShare”排序并显示 任何帮助都会很好,我不熟悉XSLT,甚至现有的代码都是由StackOverflow的一些有帮助的人编写的 预期O/p:Xml 合并母公司及;使用XSLT 1.0将子数据放在一个逗号分隔的排序列中,xml,xslt,parent-child,grouping,Xml,Xslt,Parent Child,Grouping,我想把父母“被保险人”和子女“被保险账户”列在一列;逗号分隔它们,其中InsuredAccnt(在我的XML中为INSA)始终是第一行,其余子InsuredAccounts(在我的XML中为INS1和INS2)需要按“InsuredShare”排序并显示 任何帮助都会很好,我不熟悉XSLT,甚至现有的代码都是由StackOverflow的一些有帮助的人编写的 预期O/p: Client Sum Insured Report UK SNo. Policy Number Customer
Client Sum Insured Report
UK
SNo. Policy Number Customer Name Cover Note # Insured No. of Addendas Sum Insured Total Commission
1 POL1 ABC 50242 INSA, INS2, INS1 2 40000 65
2 POL2 XYZ 12345 INSB, INS3 1 30000 30
Totals : 70000 95
US
SNo. Policy Number Customer Name Cover Note # Insured No. of Addendas Sum Insured Total Commission
1 JKL 45678 INSC 0 10000 10
Totals : 10000 10
XML:
50242-1
50
50242
基础知识
波尔1
10000
英萨
英国
INS1
5.
INS2
25
50242-2
5.
50242
基础知识
波尔1
20000
英萨
英国
INS1
5.
INS2
25
10
50242
基础知识
波尔1
10000
英萨
英国
INS1
5.
INS2
25
12345-1
20
12345
XYZ
波尔2
20000
INSB
英国
INS3
20
10
12345
XYZ
波尔2
10000
INSB
英国
INS3
20
10
45678
JKL
10000
INSC
美国
使用的XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/SiebelMessage/ListOfClientSumInsuredReportIo">
<xsl:text>		</xsl:text>
<xsl:text>Client Sum Insured Report</xsl:text>
<xsl:text> </xsl:text>
<xsl:apply-templates select="GroupPolicies[not(preceding-sibling::GroupPolicies/Organization = Organization)]/Organization" />
</xsl:template>
<xsl:template match="GroupPolicies" >
<xsl:variable name="count" select="position()"/>
<xsl:value-of select="$count"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="Policy"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="Customer"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="Cover"/>
<xsl:text>	</xsl:text>
<xsl:for-each select="ListOfClientSumInsuredReportIo_Insured/GroupPolicies_Insured/InsuredAccount">
<xsl:value-of select="."/>
<xsl:if test="not(position()=last())"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each> <!-- Comma Separated List of Insured Accounts per Cover-->
<xsl:text>	</xsl:text>
<xsl:value-of select="count(../GroupPolicies[Organization=current()/Organization and Cover=current()/Cover]/Addenda[string-length()>0])"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="sum(../GroupPolicies[Organization=current()/Organization and Cover=current()/Cover]/SumInsured)"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="sum(../GroupPolicies[Organization=current()/Organization and Cover=current()/Cover]/CommAmt)"/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="Organization">
<xsl:text> </xsl:text>
<xsl:text>SNo.</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>Policy Number</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>Customer Name</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>Cover Note #</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>Insured</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>No. of Addendas</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>Sum Insured</xsl:text>
<xsl:text>	</xsl:text>
<xsl:text>Total Commission</xsl:text>
<xsl:text> </xsl:text>
<xsl:variable name="temp" select="." />
<xsl:apply-templates select="//GroupPolicies[Organization = current() and not(preceding-sibling::GroupPolicies/Cover=Cover)]"/>
<xsl:text>Totals:</xsl:text>
<xsl:text>														</xsl:text><xsl:value-of select="sum(../../GroupPolicies[Organization=current()]/SumInsured)"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="sum(../../GroupPolicies[Organization=current()]/CommAmt)"/>
</xsl:template>
</xsl:stylesheet>
客户保险金额报告
,
斯诺。
保单号码
客户名称
封面说明#
确保
增编数目
保险金额
佣金总额
总数:
希望这是可以实现的…可以使用以下语法:
<xsl:value-of select="InsuredAccnt"/>
<xsl:for-each select="ListOfGroupPolicies_Insured/GroupPolicies_Insured">
<xsl:sort select="InsuredShare" order="descending" data-type="number"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="InsuredAccount"/>
,
而不是:
<xsl:for-each select="ListOfClientSumInsuredReportIo_Insured/GroupPolicies_Insured/InsuredAccount">
<xsl:value-of select="."/>
<xsl:if test="not(position()=last())"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each>
,
<xsl:for-each select="ListOfClientSumInsuredReportIo_Insured/GroupPolicies_Insured/InsuredAccount">
<xsl:value-of select="."/>
<xsl:if test="not(position()=last())"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each>