xml - XSLT 从 xml 规则中获取第一个日期
问题描述
如何从多行中获取第一个日期?所以我得到一个带有订单的 XML,但在标题中我想要第一个请求的日期。我尝试用一些代码来解释:
XML:
<?xml version="1.0"?>
<xmlOrders>
<rec>
<supplierCode></supplierCode>
<orderNumber>abcd</orderNumber>
<xmlOrderLines>
<rec>
<orderLine>10</orderLine>
<requestedDeliveryDate>20200707</requestedDeliveryDate>
</rec>
<rec>
<orderLine>20</orderLine>
<requestedDeliveryDate>20200916</requestedDeliveryDate>
</rec>
<rec>
<orderLine>30</orderLine>
<requestedDeliveryDate>20200601</requestedDeliveryDate>
</rec>
</xmlOrderLines>
</rec>
</xmlOrders>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<DataSet>
<vorh>
<vorh.vorh_dat_gewenst>FIRST DATE OF ORDERLINES HERE.....</vorh.vorh_dat_gewenst>
<xsl:for-each select="xmlOrders/rec/xmlOrderLines/rec">
<vorr>
<vorr.vorr_volgorde><xsl:value-of select="orderLine"/></vorr.vorr_volgorde>
<vorr.vorr_dat_gewenst><xsl:value-of select="requestedDeliveryDate"/></vorr.vorr_dat_gewenst>
</vorr>
</xsl:for-each>
</vorh>
</DataSet>
</xsl:template>
</xsl:stylesheet>
解决方案
如果您仅限于 XSLT 1.0,则需要使用一种相当原始的方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/xmlOrders">
<DataSet>
<vorh>
<vorh.vorh_dat_gewenst>
<xsl:for-each select="rec/xmlOrderLines/rec">
<xsl:sort select="requestedDeliveryDate" data-type="number" order="ascending"/>
<xsl:if test="position()=1">
<xsl:value-of select="requestedDeliveryDate"/>
</xsl:if>
</xsl:for-each>
</vorh.vorh_dat_gewenst>
<xsl:for-each select="rec/xmlOrderLines/rec">
<vorr>
<vorr.vorr_volgorde>
<xsl:value-of select="orderLine"/>
</vorr.vorr_volgorde>
<vorr.vorr_dat_gewenst>
<xsl:value-of select="requestedDeliveryDate"/>
</vorr.vorr_dat_gewenst>
</vorr>
</xsl:for-each>
</vorh>
</DataSet>
</xsl:template>
</xsl:stylesheet>
除非您的处理器恰好支持 EXSLTmath:min()
扩展功能。在这种情况下,您可以这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="math">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/xmlOrders">
<DataSet>
<vorh>
<vorh.vorh_dat_gewenst>
<xsl:value-of select="math:min(rec/xmlOrderLines/rec/requestedDeliveryDate)"/>
</vorh.vorh_dat_gewenst>
<xsl:for-each select="rec/xmlOrderLines/rec">
<vorr>
<vorr.vorr_volgorde>
<xsl:value-of select="orderLine"/>
</vorr.vorr_volgorde>
<vorr.vorr_dat_gewenst>
<xsl:value-of select="requestedDeliveryDate"/>
</vorr.vorr_dat_gewenst>
</vorr>
</xsl:for-each>
</vorh>
</DataSet>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- docker - 为什么 Openshift 镜像流哈希与 Redhat 注册表 API 哈希不同?
- android - 如何在不添加电话/手机号码的情况下添加联系人?
- java - 没有得到预期的 JSON 格式
- docker - 来自 golang api 的 Docker exec 命令
- mongodb - 如何过滤在其属性之一中包含某些字符串的 mongo 文档?
- python - Anaconda python:固定通道而不是包版本
- javascript - oData 中的 SAPUI5 日期不匹配
- javascript - 结合 es6 函数 every 和 sum 并返回布尔值
- python - 打印后序树
- validation - 如何在 Yii 2 中使用唯一验证