XSL の使用を開始しましたが、固有の動的列データに問題があります。同様の問題について読んだことがありますが、この状況はかなり異なっているように思われるため、これらの解決策をこの問題に適用することはできません。
多数の<ID>
との<Date>
値で拡大または縮小できる次のサンプル データ セットがあります。
<Report>
<DataSets>
<Data>
<ID>1</ID>
<Date>201211</Date>
</Data>
<Data>
<ID>1</ID>
<Date>201211</Date>
</Data>
<Data>
<ID>1</ID>
<Date>201210</Date>
</Data>
<Data>
<ID>2</ID>
<Date>201209</Date>
</Data>
<Data>
<ID>1</ID>
<Date>201208</Date>
</Data>
<Data>
<ID>2</ID>
<Date>201208</Date>
</Data>
<Data>
<ID>3</ID>
<Date>201208</Date>
</Data>
<Data>
<ID>3</ID>
<Date>201208</Date>
</Data>
</DataSets>
</Report>
次のテーブルを生成する XSL コードを取得しようとしています。
ID 201208 201209 201210 201211
1 1 0 1 2
2 1 1 0 0
3 2 0 0 0
列は動的で、列ヘッダーは<Date>
要素の一意の値です。行は一意の ID のコレクションであり、データは<ID>
for eachのカウントです<Date>
。私が苦労しているのは、<ID>
for eachのカウントを動的に作成すること<Date>
です。
これまでのところ、テーブルを生成するキーを使用して次の XSL ファイルがありますが、ご覧のとおり、日付はハードコードされています。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" >
<xsl:template match ="/" >
<html>
<body>
<xsl:apply-templates select="Report/DataSets"/>
</body>
</html>
</xsl:template>
<xsl:key name="Data_ID" match="Data" use="ID" />
<xsl:key name="Data_D" match="Data" use="Date"/>
<xsl:template match="Report/DataSets" >
<table>
<tr>
<th>ID</th>
<xsl:for-each select="Data[generate-id(.) = generate-id(key('Data_D', Date)[1])]">
<xsl:sort select="Date"/>
<!-- Dynamically add headers for each Date Column -->
<th><xsl:value-of select="Date"/></th>
</xsl:for-each>
</tr>
<xsl:for-each select="Data[generate-id(.) = generate-id(key('Data_ID', ID)[1])]">
<xsl:sort select="ID"/>
<tr>
<td><xsl:value-of select="ID"/></td>
<!-- Dynamically count IDs for each Date Column -->
<!-- How to do this step? -->
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201208'])"/></td>
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201209'])"/></td>
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201210'])"/></td>
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201211'])"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
これらのハードコードされたエントリを置き換えるために必要なもの
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201208'])"/></td>
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201209'])"/></td>
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201210'])"/></td>
<td><xsl:value-of select="count(key('Data_ID', ID)[Date='201211'])"/></td>
動的コードで?