【问题标题】:XSLT Get first date out of xml rulesXSLT 从 xml 规则中获取第一个日期
【发布时间】:2020-06-09 08:37:22
【问题描述】:

如何从多行中获取第一个日期? 所以我得到一个带有订单的 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>

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    如果您仅限于 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>
    

    除非您的处理器恰好支持 EXSLT math: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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-08
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多