比较 XSLT 中的朱利安日期并替换为更高

Compare julian date in XSLT and replace with higher

我在 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>

我的要求是检查相同的订单号,如果相同则取 更高的日期,在我的例子中是朱利安格式,所以我只需要 那个数字大的那个。

输出 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>

谢谢 牙坛

这是您可以查看的一种方式:

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>