グループ化された結果を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つの列を作成することです。私は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と話し合った後、このユースケースは彼が何を望んでいるかを示していると思います。次のサンプル入力ドキュメントは、1人または2人の従業員がいる5つの部門を示しています。ノードの順序は重要ではありません。
ユースケース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順不同リストが含まれます。各列には、部門の約3分の1が含まれ、最後の列はこの点で不規則になっています。トップダウン、次に左から右に読むと、部門はアルファベット順にソートする必要があります。各部門内で、従業員をアルファベット順にリストする必要があります。
ユースケース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>