【问题标题】:Tokenize and compare dates in xslt 1.0在 xslt 1.0 中标记和比较日期
【发布时间】:2015-08-18 11:55:15
【问题描述】:

我在 xslt1.0 中有一个变量,其中包含带有分隔符的日期,例如 ";2015 年 8 月 11 日 11:16;2015 年 8 月 7 日 08:27;2015 年 8 月 12 日 15:14" 我想标记这个变量值并获取最新日期并将其存储在变量中。谁能帮帮我。

【问题讨论】:

  • 工作量很大。您使用的是哪种 XSLT 处理器?一些扩展功能在这里可能很有用。
  • 我正在使用 Xalan 处理器

标签: xml xslt-1.0


【解决方案1】:

Xalan 支持 EXSLT str:tokenize() 函数,所以它会处理这个问题。之后,您只需按各个日期和时间组件对令牌进行排序,然后抓取最后一个。

<xsl:for-each select="str:tokenize($dates, ';')">
    <!-- sort by year -->
    <xsl:sort select="substring(., 9, 4)"/>
    <!-- sort by month -->
    <xsl:sort select="string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec', substring(., 1, 3)))" data-type="number"/>
    <!-- sort by day -->
    <xsl:sort select="substring(., 5, 2)"/>
    <!-- sort by time -->
    <xsl:sort select="substring(., 14, 4)"/>
    <xsl:if test="position()=last()">
        <xsl:value-of select="."/>
    </xsl:if>
</xsl:for-each>

请注意,如果您的日期并非全部采用相同的格式(在您的输入中,最后一个日期在月份和日期之间没有空格),这将不起作用。

【讨论】:

  • 我在 str:tokenize 语句中遇到错误。(转换错误-XSL 转换失败)。我正在使用 Visual Studio8 进行开发。将其包含在样式表中 (xmlns:str="exslt.org/strings" extension-element-prefixes="str")。我正在为根据文档使用 Xalan 的 Teamcenter 应用程序构建此样式表。
  • @userksp 我无法调试我看不到的代码,即使我想这样做。我怀疑您在收到该错误时没有使用 Xalan?
  • 你能告诉我任何其他不使用 str:tokenize 的方法吗?请告诉我您是否需要我的任何其他意见
  • 请帮助我解决这个问题。我是 xslt 的初学者,所以想不出任何解决方案.. 尝试过去 2 天,迫切希望找到解决方案
  • 您可以在此处查看使用命名递归模板进行标记的示例:stackoverflow.com/questions/31593114/… 不确定您为什么要这样做。如果您使用的是 Xalan,则不需要它;如果你不使用 Xalan,为什么说你是?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多