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