xslt – 在xml记录中获取最新日期
发布时间:2020-12-16 07:49:12 所属栏目:百科 来源:网络整理
导读:我的数据模型如下: ClubCaptainName/NameDateOfBirth15-01-1985/DateOfBirth/CaptainPlayingStaffPlayerDateOfBirth14-01-1993/DateOfBirth/PlayerPlayerDateOfBirth07-12-1975/DateOfBirth/PlayerPlayerDateOfBirth11-11-1991/DateOfBirth/Player/PlayingS
我的数据模型如下:
<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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |