XSLT - 在for循环中按字母顺序排序

时间:2017-10-25 11:19:31

标签: xml loops sorting xslt alphabetical

我正在尝试使用XSLT对我的XML文件中的用户进行排序。

以下是XML示例

<ROOT>
    <ROW>
        <FULLNAME>Adam Low</FULLNAME>
        <GROUPS>
            <DEPARTMENT>Test 1</DEPARTMENT>
            <DEPARTMENT>Test 2</DEPARTMENT>
        </GROUPS>
    </ROW>
    <ROW>
        <FULLNAME>Julie Nelson</FULLNAME>
        <GROUPS>
            <DEPARTMENT>Test 1</DEPARTMENT>
            <DEPARTMENT>Test 2</DEPARTMENT>
        </GROUPS>
    </ROW>
    <ROW>
        <FULLNAME>Colin Low</FULLNAME>
        <GROUPS>
            <DEPARTMENT>Test 1</DEPARTMENT>
        </GROUPS>
    </ROW>
    <ROW>
        <FULLNAME>Bobby Low</FULLNAME>
        <GROUPS>
            <DEPARTMENT>Test 1</DEPARTMENT>
        </GROUPS>
    </ROW>
</ROOT>

以下是我认为XSLT看起来的方式

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:template match="ROOT">
        <table>
            <tbody>
                <tr>
                    <td>
                        <strong>Users</strong>
                    </td>
                </tr>
                <tr>
                    <td>
                        <xsl:for-each select="ROW/GROUPS">
                            <xsl:if test="DEPARTMENT = 'Test 1'">
                                <xsl:sort select="../FULLNAME" />
                                <xsl:value-of select="../FULLNAME" />
                                <br />
                            </xsl:if>
                        </xsl:for-each>
                    </td>
                </tr>
            </tbody>
        </table>
    </xsl:template>
</xsl:stylesheet>

简而言之,我循环遍历ROW中的每个ROOT以及DEPARTMENT节点中的每个GROUPS,以便对“测试1”和“#39”进行精确测试;在这一点上,我将FULLNAME节点的值拉高,并将其写入<TD>,我想按字母方式对我放入<TD>的每个值进行排序。目前,我<xsl:sort select="../FULLNAME" />无效。

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以在谓词中表达条件

<xsl:for-each select="ROW/GROUPS[DEPARTMENT = 'Test 1']">
  <xsl:sort select="../FULLNAME" />

然后xsl:sort处于正确的位置。