Arrays XPATH:使用数组或距离,使用非唯一的数据创建唯一列表

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

我有这样一个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>

美元
银行付款
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允许您按字面意思创建结果元素,而不是