我有一个像这样的xml:
<Income>
<Currency>USD</Currency>
<Description>Bank Payment</Description>
<Sum>300.82</Sum>
</Income>
<Income>
<Currency>EUR</Currency>
<Description>Bank Payment</Description>
<Sum>100</Sum>
</Income>
<Income>
<Currency>USD</Currency>
<Description>Cash</Description>
<Sum>500</Sum>
</Income>
我需要按货币对这些数据进行排序。可能有几个具有相同货币的区块,在这种情况下,我需要从那里拿出金额并将它们放到现有货币中。这是我想得到的:
<Payment>
<Currency>USD</Currency>
<BankPayment>300.82</BankPayment>
<Cash>500</Cash>
</Payment>
<Payment>
<Currency>EUR</Currency>
<BankPayment>100</BankPayment>
</Payment>
我想我可以在这里使用数组或使用不同的数组,但我不知道如何处理来自非唯一项目的数据。 有没有办法解决这个问题? (我只能使用Xpath 1.0) 谢谢你的帮助!
答案 0 :(得分:1)
<xsl:key name="ccy" match="Income" use="Currency" />
<xsl:template match="start">
<xsl:for-each select="Income[count(. | key('ccy', Currency)[1]) = 1]">
<xsl:sort select="Currency" />
<xsl:element name="Payment">
<xsl:element name="CurCode">
<xsl:value-of select="Currency" />
</xsl:element>
<xsl:for-each select="key('ccy', Currency)">
<xsl:sort select="Description" />
<xsl:element name="{Description}">
<xsl:value-of select="Sum" />
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:template>
注意 <Description>
值不应包含任何空格,否则您可能会获得不正确的xml元素名称(xml不支持带空格的标记名称)。