xsl:使用apply-templates排序而不排序

时间:2012-03-22 14:51:41

标签: xslt

我有一个很大的XSL文档,用于执行许多操作的赋值。它已接近完成,但我错过了必须进行排序的要求,我无法使其正常工作。这是正在发生的事情的SSCCE。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!--   Root Document    -->
<xsl:template match="/">

    <html>
    <body>

        <xsl:apply-templates select="staff">
            <xsl:sort select="member/last_name" />
        </xsl:apply-templates>

    </body>
    </html>

</xsl:template>

<xsl:template match="member">
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/>
</xsl:template>

</xsl:stylesheet>

XML文件看起来像这样

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="sort.xsl"?>

<staff>
    <member>
        <first_name>Joe</first_name>
        <last_name>Blogs</last_name>
    </member>

    <member>
        <first_name>John</first_name>
        <last_name>Smith</last_name>
    </member>

    <member>
        <first_name>Steven</first_name>
        <last_name>Adams</last_name>
    </member>

</staff>

我期待工作人员按姓氏列出,但他们没有排序。请记住,我对XSLT非常缺乏经验。

2 个答案:

答案 0 :(得分:25)

    <xsl:apply-templates select="staff">
        <xsl:sort select="member/last_name" />
    </xsl:apply-templates>

选择staff元素并对它们进行排序,但只有一个staff元素,所以这是一个no-op。

更改为

    <xsl:apply-templates select="staff/member">
        <xsl:sort select="last_name" />
    </xsl:apply-templates>

然后选择所有成员元素并对其进行排序。

答案 1 :(得分:3)

缺少的是员工匹配模板或将匹配模板更改为成员,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!--   Root Document    -->
<xsl:template match="/">

    <html>
    <body>

        <xsl:apply-templates select="staff/member">
            <xsl:sort select="last_name" />
        </xsl:apply-templates>

    </body>
    </html>

</xsl:template>

<xsl:template match="member">
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/>
</xsl:template>

</xsl:stylesheet>
相关问题