我在XSLT中有一个棘手的要求
输入XML在
之下<Orders>
<Order>
<OrderNumber>100</OrderNumber>
<Date>116256</Date>
</Order>
<Order>
<OrderNumber>101</OrderNumber>
<Date>116257</Date>
</Order>
<Order>
<OrderNumber>102</OrderNumber>
<Date>116286</Date>
</Order>
<Order>
<OrderNumber>102</OrderNumber>
<Date>116276</Date>
</Order>
</Orders>
我的要求是检查相同的订单号,如果它们相同则接受 更高的日期,在我的情况下是julian格式,所以我必须采取 数字较高的那个。
输出XML应如下所示。
<Orders>
<Order>
<OrderNumber>100</OrderNumber>
<Date>116256</Date>
</Order>
<Order>
<OrderNumber>101</OrderNumber>
<Date>116257</Date>
</Order>
<Order>
<OrderNumber>102</OrderNumber>
<Date>116286</Date>
</Order>
<Order>
<OrderNumber>102</OrderNumber>
<Date>116286</Date>
</Order>
</Orders>
由于 亚坦
答案 0 :(得分:0)
这是你可以看到它的一种方式:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="order-by-number" match="Order" use="OrderNumber" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Date">
<xsl:copy>
<xsl:value-of select="max(key('order-by-number', ../OrderNumber)/Date)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>