比较XSLT中的julian日期并替换为更高的

时间:2016-10-18 14:13:55

标签: xml sorting xslt julian

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

由于 亚坦

1 个答案:

答案 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>