我想在 3 列中输出分组结果。我没有使用表格,所以我想我的意思是并排显示 3 个结果部分(参见 HTML)。
我根据其中一个节点的值对结果进行了分组,并在一个标题下分组,该标题是节点的值。例如:
<All_Results>
<Result>
<Dept>Finance</Dept>
<Name>Bob</Name>
</Result>
<Result>
<Dept>Finance</Dept>
<Name>Susan</Name>
</Result>
<Result>
<Dept>Sales</Dept>
<Name>Igor</Name>
</Result>
</All_Results>
格式如下:
<li>
<h4>Finance</h4>
<ul>
<li>Bob</li>
</ul>
<ul>
<li>Susan</li>
</ul>
<h4>Sales</h4>
<ul>
<li>Igor</li>
</ul>
</li>
这很有效,我很满意。现在我要做的是并排创建 3 列 Depts 及其结果(即本例中的 Names)。我期待 9 个可能的部门,但这可能会在未来发生变化。
到目前为止,这是我的 XSLT(到目前为止,它所做的只是上面的格式,还没有在列上工作,我不知道如何解决这个问题):
<xsl:output method="html" />
<xsl:key name="results-by-dept" match="Result" use="Dept" />
<xsl:template match="All_Results">
<xsl:variable name="Rows" select="Result" />
<xsl:variable name="RowCount" select="count($Rows)" />
<ul class="deptList">
<xsl:for-each select="Result[count(. | key('results-by-dept', Dept)[1]) = 1]">
<xsl:sort select="Dept" order ="ascending"/>
<li>
<h4>
<xsl:value-of select="Dept" />
</h4>
<ul>
<xsl:for-each select="key('results-by-dept', Dept)">
<xsl:sort select="Name" />
<li>
<xsl:value-of select="Name"/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
任何帮助将非常感激!
肖恩的编辑
在与 OP 讨论之后,我认为这个用例说明了他想要什么。以下示例输入文档显示了 5 个部门,有 1 名或 2 名员工。节点的顺序并不重要。
用例 1:输入文档
<All_Results>
<Result>
<Dept>Finance</Dept>
<Name>Bob</Name>
</Result>
<Result>
<Dept>Engineering</Dept>
<Name>Inna</Name>
</Result>
<Result>
<Dept>Finance</Dept>
<Name>Susan</Name>
</Result>
<Result>
<Dept>Sales</Dept>
<Name>Igor</Name>
</Result>
<Result>
<Dept>Human resources</Dept>
<Name>Jane</Name>
</Result>
<Result>
<Dept>Admin</Dept>
<Name>Joe</Name>
</Result>
<Result>
<Dept>Engineering</Dept>
<Name>Dima</Name>
</Result>
<Result>
<Dept>Human resources</Dept>
<Name>Beth</Name>
</Result>
</All_Results>
输出将像这样进行转换(如下列表)。HTML 表格将由 3 列但只有 1 行构成。每个单元格都包含一个以部门名称为首的部门员工的 HTML 无序列表。每列包含大约三分之一的部门,最后一列在这方面参差不齐。从上到下然后从左到右阅读,部门应该按字母顺序排序。在每个部门内,员工应按字母顺序排列。
用例 1:输出文档
<table>
<tr>
<td>
<ul class="deptList">
<li>
<h4>Admin</h4>
<ul>
<li>Joe</li>
</ul>
</li>
<li>
<h4>Engineering</h4>
<ul>
<li>Dima</li>
<li>Inna</li>
</ul>
</li>
</ul>
</td>
<td>
<ul class="deptList">
<li>
<h4>Finance</h4>
<ul>
<li>Bob</li>
<li>Susan</li>
</ul>
</li>
<li>
<h4>Human resources</h4>
<ul>
<li>Beth</li>
<li>Jane</li>
</ul>
</li>
</ul>
</td>
<td>
<ul class="deptList">
<li>
<h4>Sales</h4>
<ul>
<li>Igor</li>
</ul>
</li>
</ul>
</td>
</tr>
</table>