I have an xml document that looks something like this:
<units>
<unit>
<year></year>
<month></month>
<qty></qty>
</unit>
</units>
I want to create a crosstab view of this data in html with each row represented by a year, each column represented by a month, and each value containing the sum of the qty’s for the specific year/month. Something a little like this:
Jan Feb Mar Apr.... etc
2010 345 0 12 0
2011 1 23 344 0
2012 99 1 23 0.... etc
My primary question is this: is crosstab even possible with xslt?
My follow-up question would be can you point an xslt newbie, such as myself, in the right direction to get started trying to make this work?
SAMPLE DATA:
<units>
<unit>
<year>2010</year>
<month>9</month>
<qty>13320</qty>
</unit>
<unit>
<year>2010</year>
<month>9</month>
<qty>2445</qty>
</unit>
<unit>
<year>2010</year>
<month>10</month>
<qty>8949</qty>
</unit>
<unit>
<year>2010</year>
<month>10</month>
<qty>13650</qty>
</unit>
<unit>
<year>2010</year>
<month>11</month>
<qty>4091</qty>
</unit>
<unit>
<year>2010</year>
<month>11</month>
<qty>6600</qty>
</unit>
<unit>
<year>2010</year>
<month>12</month>
<qty>686</qty>
</unit>
<unit>
<year>2010</year>
<month>12</month>
<qty>678</qty>
</unit>
<unit>
<year>2011</year>
<month>1</month>
<qty>1234</qty>
</unit>
<unit>
<year>2011</year>
<month>1</month>
<qty>12345</qty>
</unit>
<unit>
<year>2011</year>
<month>2</month>
<qty>4500</qty>
</unit>
<unit>
<year>2011</year>
<month>2</month>
<qty>999</qty>
</unit>
<unit>
<year>2011</year>
<month>3</month>
<qty>166</qty>
</unit>
<unit>
<year>2011</year>
<month>3</month>
<qty>456666</qty>
</unit>
<unit>
<year>2011</year>
<month>4</month>
<qty>41113</qty>
</unit>
<unit>
<year>2011</year>
<month>4</month>
<qty>1150</qty>
</unit>
<unit>
<year>2011</year>
<month>5</month>
<qty>4150</qty>
</unit>
<unit>
<year>2011</year>
<month>5</month>
<qty>491</qty>
</unit>
<unit>
<year>2011</year>
<month>6</month>
<qty>11250</qty>
</unit>
<unit>
<year>2011</year>
<month>6</month>
<qty>3400</qty>
</unit>
<unit>
<year>2011</year>
<month>7</month>
<qty>485</qty>
</unit>
<unit>
<year>2011</year>
<month>7</month>
<qty>90</qty>
</unit>
<unit>
<year>2011</year>
<month>8</month>
<qty>1606</qty>
</unit>
<unit>
<year>2011</year>
<month>8</month>
<qty>202000</qty>
</unit>
<unit>
<year>2011</year>
<month>9</month>
<qty>45333</qty>
</unit>
<unit>
<year>2011</year>
<month>9</month>
<qty>13650</qty>
</unit>
<unit>
<year>2011</year>
<month>10</month>
<qty>4050</qty>
</unit>
<unit>
<year>2011</year>
<month>10</month>
<qty>431</qty>
</unit>
<unit>
<year>2011</year>
<month>11</month>
<qty>45713</qty>
</unit>
<unit>
<year>2011</year>
<month>11</month>
<qty>13690</qty>
</unit>
<unit>
<year>2011</year>
<month>12</month>
<qty>4050</qty>
</unit>
<unit>
<year>2011</year>
<month>12</month>
<qty>431</qty>
</unit>
<unit>
<year>2012</year>
<month>1</month>
<qty>2500</qty>
</unit>
<unit>
<year>2012</year>
<month>1</month>
<qty>34100</qty>
</unit>
<unit>
<year>2012</year>
<month>2</month>
<qty>400</qty>
</unit>
<unit>
<year>2012</year>
<month>2</month>
<qty>99</qty>
</unit>
<unit>
<year>2012</year>
<month>3</month>
<qty>1606</qty>
</unit>
<unit>
<year>2012</year>
<month>3</month>
<qty>202000</qty>
</unit>
<unit>
<year>2012</year>
<month>4</month>
<qty>53773</qty>
</unit>
<unit>
<year>2012</year>
<month>4</month>
<qty>13650</qty>
</unit>
<unit>
<year>2012</year>
<month>5</month>
<qty>4150</qty>
</unit>
<unit>
<year>2012</year>
<month>5</month>
<qty>4231</qty>
</unit>
<unit>
<year>2012</year>
<month>6</month>
<qty>278</qty>
</unit>
<unit>
<year>2012</year>
<month>6</month>
<qty>6100</qty>
</unit>
<unit>
<year>2012</year>
<month>7</month>
<qty>406</qty>
</unit>
<unit>
<year>2012</year>
<month>7</month>
<qty>95</qty>
</unit>
</units>
Here is an XSLT 1.0 solution (there might be some work needed to make the numbers align properly):
When this transformation is applied on the following XML document (none was provided !!!):
2010
2
3
2010
3
44
2010
9
44
2011
1
5
2011
3
11
2011
6
11
2011
4
15
the wanted, correct result is produced: