我需要根据OPERATION_CODE对记录进行分组。每条记录的组合标签中可以有多个“限额”。如果多个记录具有相同的operation_code,则我需要所有的余量。我正在使用xsl 1.0。 使用此xsl,我每条记录仅获得一个津贴(在示例输入中,第一条记录获得第一条津贴,第二条记录获得第一条津贴)。预期输出是第一条记录和第二条记录中的所有配额,因为operation_code相同。
sample input:
<root xmlns="">
<records>
<record>
<OPERATION_CODE>123456</OPERATION_CODE>
<Combinations>
<allowance>
<WMI_CODE>MR0</WMI_CODE>
<VDS_CODE>1</VDS_CODE>
</allowance>
<allowance>
<WMI_CODE>MR1</WMI_CODE>
<VDS_CODE>2</VDS_CODE>
</allowance>
</Combinations>
</record>
<record>
<OPERATION_CODE>123456</OPERATION_CODE>
<Combinations>
<allowance>
<WMI_CODE>MR2</WMI_CODE>
<VDS_CODE>3</VDS_CODE>
</allowance>
</Combinations>
</record>
</records>
</root>
预期输出:
<LaborOperationsDetail>
<LaborOperationID>123456</LaborOperationID>
<Combinations>
<Allowance>
<GroupID>MR0</star:GroupID>
<VID>1</star:VID>
</Allowance>
<Allowance>
<GroupID>MR1</star:GroupID>
<VID>2</star:VID>
</Allowance>
<Allowance>
<GroupID>MR2</star:GroupID>
<VID>3</star:VID>
</Allowance>
</Combinations>
<LaborOperationsDetail>
使用的xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:key name="opcode" match="record" use="OPERATION_CODE" />
<xsl:template match="root/records">
<xsl:for-each select="record[generate-id() = generate-id(key('opcode', OPERATION_CODE)[1])]">
<LaborOperationsDetail>
<LaborOperationID><xsl:value-of select="OPERATION_CODE"/></LaborOperationID>
<Combinations>
<xsl:for-each select="key('opcode' ,OPERATION_CODE)">
<Allowance>
<GroupID><xsl:value-of select="Combinations/allowance/WMI_CODE" /></GroupID>
<VID><xsl:value-of select="Combinations/allowance/VDS_CODE" /></VID>
</Allowance>
</xsl:for-each >
</Combinations>
</LaborOperationsDetail>
</xsl:for-each >
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
这样尝试吗?
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="opcode" match="record" use="OPERATION_CODE"/>
<xsl:template match="/root">
<xsl:for-each select="records/record[generate-id() = generate-id(key('opcode', OPERATION_CODE)[1])]">
<LaborOperationsDetail>
<LaborOperationID>
<xsl:value-of select="OPERATION_CODE"/>
</LaborOperationID>
<Combinations>
<xsl:for-each select="key('opcode' ,OPERATION_CODE)/Combinations/allowance">
<Allowance>
<GroupID>
<xsl:value-of select="WMI_CODE"/>
</GroupID>
<VID>
<xsl:value-of select="VDS_CODE"/>
</VID>
</Allowance>
</xsl:for-each>
</Combinations>
</LaborOperationsDetail>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
您现在拥有的是:
<xsl:for-each select="key('opcode' ,OPERATION_CODE)">
选择当前组中的两个record
节点,并为每个节点创建一个Allowance
节点。在这些节点内,从每个allowance
中的 first record
中检索值。