私は xslt が初めてで、何度も試みた後、以下を解決できません。
変更できないデータを含む xml データ ファイルがあります。たとえば、以下の単純な xml ファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<sales>
<sale>
<year>2012</year>
<amount>200</amount>
</sale>
<sale>
<year>2012</year>
<amount>180</amount>
</sale>
<sale>
<year>2010</year>
<amount>120</amount>
</sale>
</sales>
販売データを年ごとにグループ化し、金額を合計して、年間の合計金額を取得したいのですが、これで問題ありません。
xml ファイルには 2012 年と 2010 年のデータがありますが、2011 年のデータはありません。
2011 年の出力を 0 にしたいので、2010 年、2011 年、および 2012 年すべての出力があります。
実際には xls を使用してグラフを作成しますが、この単純な例では出力として html を使用しています。Altova XMLSpy を使用して xls をテストし、結果の html ドキュメントを確認しています。
これは、HTML でデータをグループ化して表示するために作成した単純な xls コードです。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>Year</th>
<th>Amount</th>
</tr>
<xsl:for-each-group select="sales/sale" group-by="year">
<xsl:sort select="year"/>
<tr>
<td><xsl:value-of select="year"/></td>
<td><xsl:value-of select="sum(current-group()/amount)"/></td>
</tr>
</xsl:for-each-group>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
xml ファイルに対して Altova XMLSpy を使用してこれを実行すると、ブラウザー ウィンドウに以下のように表示されます。3 行の小さなテーブル、タイトル付きのヘッダー、2 行のデータ、1 つは 2012 年用、もう 1 つは 2010 年用です。スタックオーバーフローの新しいユーザーとして画像をまだ使用できないため、表示できるソース HTML コードを次に示します。ブラウザで。
<html>
<body>
<table border="1">
<tr>
<th>Year</th>
<th>Amount</th>
</tr>
<tr>
<td>2010</td>
<td>120</td>
</tr>
<tr>
<td>2012</td>
<td>380</td>
</tr>
</table>
</body>
</html>
出力に 2010 年、2011 年、2012 年の範囲のデータが表示されるように、xls を使用して金額が 0 の 2011 年の行を作成できますか?
xls で年をハードコーディングできないことに注意してください。欠落している年を導き出す必要があります。
通常、ソース xml ファイルに必要なすべてのデータが含まれていることを確認しますが、この場合は不可能です。
どんな助けにも感謝します。
敬具
セル