xslt – 在xml记录中获取最新日期

我的数据模型如下:
<Club>
<Captain>
<Name></Name>
<DateOfBirth>15-01-1985</DateOfBirth>
</Captain>
<PlayingStaff>
<Player>
<DateOfBirth>14-01-1993</DateOfBirth>
</Player>
<Player>
<DateOfBirth>07-12-1975</DateOfBirth>
</Player>
<Player>
<DateOfBirth>11-11-1991</DateOfBirth>
</Player>
</PlayingStaff>
</Club>

我尝试过使用这里给出的答案:XSLT: Getting the latest date,但它没有给我任何价值.

我正试图让最年轻的玩家转到外部功能.

我在Biztalk中这样做,所以我必须坚持使用XSLT1

到目前为止我的工作如下:

<xsl:variable name="youngestPlayer">
            <xsl:for-each select="$ClubRoot/*[local-name()='PlayingStaff']/*[local-name()='Player']">
                <xsl:sort select="./*[local-name()='DateOfBirth']" order="descending"/>
                <xsl:if test="position() = 1">
                    <xsl:value-of select="DateOfBirth"/>
                </xsl:if>
            </xsl:for-each>
        </xsl:variable>
        <xsl:variable name="IsYoungestPlayerUnderAgeLimit" select="externalfunctionreturningboolean">
            <xsl:element name="blahhh"><xsl:value-of select="$IsYoungestPlayerUnderAgeLimit"/></xsl:element>
            <xsl:element name="blahhh"><xsl:value-of select="$youngestPlayer"/></xsl:element>

这是大模板的一部分 – 我无法真正改变这一点,但ClubRoot的值是“< xsl:variable name =”ClubRoot“select =”/ * [1]“/>”确保我可以读取其子节点.

我总是得到

<blahhh>false</blahhh>
<blahhh/>

作为我的调试值…所以我没有拿起我期望的值

有人可以突出我出错的地方吗?

从上面的数据中,我期望在我的youngestPlayer变量中得到14-01-1993的值.但它的空白.

问题是XSLT1.0并没有真正的日期概念,所以你有效地按DateOfBirth元素排序,好像它们只是普通字符串一样.如果您可以确定日期始终采用DD-MM-YYYY格式,您可以使用字符串操作按年,月和日排序
<xsl:sort select="number(substring(DateOfBirth,7,4))" order="descending"/>
<xsl:sort select="number(substring(DateOfBirth,3,2))" order="descending"/>
<xsl:sort select="number(substring(DateOfBirth,1,2))" order="descending"/>

因此,给出以下XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>
   <xsl:template match="/Club">
      <xsl:for-each select="PlayingStaff/Player">
         <xsl:sort select="number(substring(DateOfBirth,4))" order="descending"/>
         <xsl:sort select="number(substring(DateOfBirth,2))" order="descending"/>
         <xsl:sort select="number(substring(DateOfBirth,2))" order="descending"/>

         <xsl:if test="position() = 1">
            <xsl:value-of select="DateOfBirth"/>
         </xsl:if>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

应用于XML时,将输出以下内容

14-01-1993

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇