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
中的每个 ROW
和 GROUPS
节点中的每个 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
的位置就对了
我正在尝试使用 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
中的每个 ROW
和 GROUPS
节点中的每个 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
的位置就对了