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

XSLT - Sort alphabetically in a for loop

我正在尝试使用 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>

简而言之,我循环遍历 ROOT 中的每个 ROWGROUPS 节点中的每个 DEPARTMENT 以在 'Test 1'我将 FULLNAME 节点的值向上拉出一个级别,并将其写入 <TD>,我希望按字母顺序排列我放入 <TD> 的每个值。目前我有 <xsl:sort select="../FULLNAME" /> 的地方不工作。

谢谢,

你可以用谓词表达条件

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

那么xsl:sort的位置就对了