申し訳ありませんが、私は XSL を学んでおり、次のようなテーブルを表示したいと考えています。
| | パラメータ 1 | パラメータ 2 | -------+------+--------- | | p1.1 | p1.2 | p2 | -------+------+--------- | | a11 | a21 | b01 | | | a12 | a22 | b02 |
今、私はxmlを持っています:
<?xml version="1.0" encoding="UTF-8"?>
<tb>
<col title="Param1">
<row name="1">
<stats name="p1.1" >a11</stats>
<stats name="p1.2" >a12</stats>
</row>
<row name="2">
<stats name="p1.1" >a21</stats>
<stats name="p1.2" >a22</stats>
</row>
</col>
<col title="Param2">
<row name="1">
<stats name="p2" >b01</stats>
</row>
<row name="2">
<stats name="p2" >b02</stats>
</row>
</col>
および xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:for-each select="tb">
<table class="data_table" style="width: 100%; background:gray">
<thead>
<tr>
<xsl:for-each select="col">
<xsl:choose>
<xsl:when test="count(row[1]/stats) > 1">
<th colspan="{count(row[1]/stats)}">
<xsl:value-of select="@title" />
</th>
</xsl:when>
<xsl:otherwise>
<th><xsl:value-of select="@title" /></th>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="col/row[1]/stats">
<th><xsl:value-of select="@name" /></th>
</xsl:for-each>
</tr>
</thead>
<tbody>
<tr>
<xsl:for-each select="col/row[1]/stats">
<td>
<xsl:value-of select="." />
</td>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="col/row[2]/stats">
<td>
<xsl:value-of select="." />
</td>
</xsl:for-each>
</tr>
</tbody>
</table>
</xsl:for-each>
動作しますが、単一の FOR を使用してテーブルの行を組み立てるこのコードを改善するにはどうすればよいですか? この例では、2 行 (a11|a21|b01 と a12|a22|b02) と 3 列しかありませんが、これは変更される可能性があります (20 行、4 列...)。同じ行に属するセルをグループ化する必要があるかもしれません。