如何对元素进行排序并将它们存储在变量中,XSLT

Das*_*una 3 sorting xslt variables store date

我想知道是否可以先对一些元素进行排序并将它们(已排序)存储在变量中。我需要引用它们认为 XSLT 这就是为什么我想将它们存储在变量中。

我试图执行以下操作,但似乎不起作用

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">

<xsl:variable name="deposits">
  <xsl:for-each select="/BookingCostings/MultiDeposits">
    <xsl:sort select="substring(@DepositDate, 1, 4)" />
    <xsl:sort select="substring(@DepositDate, 6, 2)" />
    <xsl:sort select="substring(@DepositDate, 9, 2)" />
 </xsl:for-each>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

我试图@DepositDate按“yyyy-mm-dd”格式对元素进行排序并将它们全部存储在$deposits变量中。这样以后我就可以使用$deposits[1].

我将不胜感激任何帮助和提示!

多谢!

Pat*_*ick 5

  1. 使用XSLT version 2.0您可以使用并告诉您的变量是使用( ")perform-sort的序列类型MultiDepositsas keywordas="element(MultiDeposits)+
  2. 由于您的数据已经为 yyyy-mm-dd 您可以避免使用子字符串来获取日期的每个部分并直接在字段上使用排序

使用此示例 xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<BookingCostings>
  <MultiDeposits depositDate="2001-10-09">1</MultiDeposits>
  <MultiDeposits depositDate="1999-10-09">2</MultiDeposits>
  <MultiDeposits depositDate="2010-08-09">3</MultiDeposits>
  <MultiDeposits depositDate="2010-07-09">4</MultiDeposits>
  <MultiDeposits depositDate="1998-01-01">5</MultiDeposits>
</BookingCostings>
Run Code Online (Sandbox Code Playgroud)

并使用 XSLT 2.0 版表:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">
 <html>
  <body>

  <xsl:variable name="deposits" as="element(MultiDeposits)+">
   <xsl:perform-sort select="BookingCostings/MultiDeposits">
    <xsl:sort select="@depositDate"/>
   </xsl:perform-sort>
  </xsl:variable>

  first date:<xsl:value-of select="$deposits[1]/@depositDate"/>,
  last date:<xsl:value-of select="$deposits[last()]/@depositDate"/>

  </body>
 </html>
 </xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

输出将是:

first date:1998-01-01, last date:2010-08-09
Run Code Online (Sandbox Code Playgroud)