以下是我的sgml文件结构:
<em>
<pgblk revdate="20130901">
<task revdate='20140901'>
<p>random texts and few more inner tags</p>
</task>
<task revdate='20150901'>
<p>random texts and few more inner tags</p>
</task>
<task revdate='20160901'>
<p>random texts and few more inner tags</p>
</task>
</pgblk>
我有很多同名的标签(任务标签),我试图在这里获得最大的revdate。我的XSLT如下:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" />
<xsl:template match="/pgblk">
<xsl:variable name="updatedrevdate">
<xsl:for-each select="task">
<xsl:sort select="@revdate" data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="@revdate" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
</xsl:template>
</xsl:stylesheet>
现在我获得了最大的任务标记值。但是当我使用同一模板中的条件来比较最大标记和页面块值时
“打印最大的重新安装的操作”
比较总是从任务中获得第一个revdate并与pageblock revdate进行比较。它没有从任务中获得最大的收益。
非常感谢任何帮助。谢谢。
答案 0 :(得分:1)
请检查以下XSLT代码是否可以帮助您更改代码。需要更改匹配的模板
<xsl:template match="pgblk">
解决方案进行比较并输出日期。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" />
<xsl:strip-space elements="*"/>
<xsl:template match="pgblk">
<xsl:variable name="updatedrevdate">
<xsl:for-each select="task">
<xsl:sort select="@revdate" data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="@revdate" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<!-- output the dates -->
<xsl:value-of select="concat('Page Block Date: ', @revdate)" />
<xsl:text> </xsl:text>
<xsl:value-of select="concat('Max Task Date: ', $updatedrevdate)" />
<xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="@revdate > $updatedrevdate">
<xsl:value-of select="concat('Max date after comparison: ', @revdate)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('Max date after comparison: ', $updatedrevdate)" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
输出
Page Block Date: 20130901
Max Task Date: 20160901
Max date after comparison: 20160901