以下是我的xml文件结构
<pgblk>
<task revdate='somedate'>
</task>
<task revdate='somedate'>
</task>
<task revdate='somedate'>
</task>
</pgblk>
我有很多同名的标签(任务标签),我试图在这里获得最大的revdate。我的XSLT如下:
<xsl:template match="/">
<xsl:variable name="updatedrevdate" select="'19000101'" />
<xsl:for-each select="pgblk">
<xsl:for-each select="task">
<xsl:when test="@revdate > updatedrevdate">
<xsl:variable name="updatedrevdate" select="revdate" />
------i want to update the variable updatedrevdate to be revdate but it is not possible since reassigning a varaible is not possible in xslt-------
</xsl:for-each>
</xsl:for-each>
</xsl:template>
Any possible help? Much appreciate the help in advance.
答案 0 :(得分:1)
假设所有&#34;日期&#34;格式为YYYYMMDD(因此可以视为数字),您需要做的只是按降序task
顺序对xsl:sort
元素(使用revdate
)进行排序,然后选择第一个
试试这个模板
<xsl:template match="/pgblk">
<xsl:for-each select="task">
<xsl:sort select="@revdate" data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:copy-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:template>
注意我在模板中匹配pgblk
,而不是xsl:for-each
,因为在您的示例中,pgblk
是根元素,因此只会是其中之一。
编辑:如果要将结果存储在变量中,只需将xsl:for-each
包裹在xsl:variable
中。
<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:value-of select="$updatedrevdate" />
</xsl:template>
</xsl:stylesheet>
中查看此操作