XSLT 3.0 中的日期排序

Posted

技术标签:

【中文标题】XSLT 3.0 中的日期排序【英文标题】:Date Sorting in XSLT 3.0 【发布时间】:2020-11-09 09:36:21 【问题描述】:

我有一个 XML 格式的日期字段,它始终采用 MMDDYYYY 格式。我正在尝试通过以下代码使用日期进行排序:

     <xsl:sort select="format-date(Date, '[M01][D01][Y0001]')"/>

需要帮助解决。

【问题讨论】:

【参考方案1】:

嗯,第一个建议是使用国际标准——它们的存在是有原因的。

如果您存储的数据不能使用国际标准,则将数据转换为国际标准格式进行处理。所以你想在你的样式表中有一个函数

<xsl:function name="f:us-date-to-iso" as="xs:date">
   <xsl:param name="us-date" as="xs:string"/> <!-- format MMDDYYYY -->
   <xsl:sequence select-"xs:date(replace($us-date, '(..)(..)(....)', '$3-$1-$2'))"/>
</xsl:function>

然后你可以使用&lt;xsl:sort select="f:us-date-to-iso(Date)"/&gt;进行排序

【讨论】:

谢谢@Michael Key,如果日期没有出现或为空白,是否可以避免调用该函数? 后续问题最好作为新问题提出,而不是作为对先前问题答案的评论。

以上是关于XSLT 3.0 中的日期排序的主要内容,如果未能解决你的问题,请参考以下文章

XslCompiledTransform 中的 XSLT 复制和排序转换引发异常

XSLT 2.0 按另一个样式表中的变量排序

XSLT 中的 XSL 排序

使用 CDATA 元素对 xml 中的 uuid 进行排序的 xslt 模板

使用 XML 中的多列进行 XSLT 排序

XSLT如何仅对XML文档的字符串节点中的数值进行排序