Arrays XPATH:使用数组或距离,使用非唯一的数据创建唯一列表
我有这样一个xml:Arrays XPATH:使用数组或距离,使用非唯一的数据创建唯一列表,arrays,xml,xslt,xpath,distinct,Arrays,Xml,Xslt,Xpath,Distinct,我有这样一个xml: <Income> <Currency>USD</Currency> <Description>Bank Payment</Description> <Sum>300.82</Sum> </Income> <Income> <Currency>EUR</Currency> <Description&g
<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>
美元
银行付款
300.82
欧元
银行付款
100
美元
现金
500
我需要按货币对这些数据进行排序。可能有几个区块使用相同的货币,在这种情况下,我需要从中提取金额,并将其转换为现有货币。以下是我想要得到的:
<Payment>
<Currency>USD</Currency>
<BankPayment>300.82</BankPayment>
<Cash>500</Cash>
</Payment>
<Payment>
<Currency>EUR</Currency>
<BankPayment>100</BankPayment>
</Payment>
美元
300.82
500
欧元
100
我想我可以在这里使用数组或distinct,但我不知道如何处理来自非唯一项的数据。
有没有办法解决这个问题?(我只能使用Xpath 1.0)
谢谢你的帮助
<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>
注意
值不应包含任何空格,否则可能会得到错误的xml元素名称(xml不支持带空格的标记名)。这是一个分组问题,可以在XSLT 1.0中使用Muenchian分组来解决。命名此标记不是一个好主意way@RudolfYurgenson:我不熟悉XML,你的意思是说也应该有一个“组”标记,即,…
(和…
?)相同。谢谢你的评论。我的意思是,根据其他节点的文本内容生成带有名称的标记是一种不好的做法。我宁愿不要@RudolfYurgenson:我以前没见过这种区别。谢谢你的指点!祝大家好运。这就是为什么使用任意数据作为标记名称是不好的。请注意,XSLT允许您按字面意思创建结果元素,而不是