无法在模板中的XSLT中传递变量值

时间:2017-09-21 06:28:48

标签: xslt comparison sgml

以下是我的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进行比较。它没有从任务中获得最大的收益。

非常感谢任何帮助。谢谢。

1 个答案:

答案 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>&#10;</xsl:text>
        <xsl:value-of select="concat('Max Task Date: ', $updatedrevdate)" />
        <xsl:text>&#10;</xsl:text>
        <xsl:choose>
            <xsl:when test="@revdate &gt; $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