У меня есть следующий XML:
<?xml version = "1.0" encoding="windows-1251"?>
<PLANTS>
<PLANT>
<NAME>APPLE</NAME>
<SIZE>SMALL</SIZE>
<TYPE>FRUIT</TYPE>
</PLANT>
<PLANT>
<NAME>CUCUMBER</NAME>
<SIZE>SMALL</SIZE>
<TYPE>VEGETABLE</TYPE>
</PLANT>
<PLANT>
<NAME>WATERMELON</NAME>
<SIZE>BIG</SIZE>
<TYPE>FRUIT</TYPE>
</PLANT>
<PLANT>
<NAME>ORANGE</NAME>
<SIZE>SMALL</SIZE>
<TYPE>FRUIT</TYPE>
</PLANT>
<PLANT>
<NAME>CARROT</NAME>
<SIZE>SMALL</SIZE>
<TYPE>VEGETABLE</TYPE>
</PLANT>
</PLANTS>
Я хочу представить эти данные в виде таблицы HTML с группировкой по типу, а затем по размеру.
Пока у меня есть этот XSLT-код (мне необходимо использовать xslt-1.0):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cfg="http://tempuri.org/config" exclude-result-prefixes="cfg">
<xsl:output method="html" indent="yes"/>
<xsl:key name="Type" match="PLANT" use="TYPE"/>
<xsl:key name="TypeSize" match="PLANT" use="concat(TYPE, '|', SIZE)"/>
<xsl:template match="PLANTS">
<xsl:copy>
<xsl:apply-templates mode="type" select="PLANT[generate-id() = generate-id(key('Type', TYPE)[1])]">
<xsl:sort select="TYPE" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="PLANT" mode="type">
<xsl:variable name="type" select="TYPE"/>
<table>
<tbody>
<tr>
<td >TYPE :
<xsl:value-of select="$type"/></td>
</tr>
<xsl:apply-templates mode="typeSize" select="key('Type', $type)[generate-id() = generate-id(key('TypeSize',concat(TYPE, '|', SIZE))[1])]"/>
</tbody>
</table>
</xsl:template>
<xsl:template match="PLANT" mode="typeSize">
<xsl:variable name="typeSize" select="concat(TYPE, '|', SIZE)"/>
<tr>
<td >SIZE :
<xsl:value-of select="SIZE"/></td>
</tr>
<xsl:for-each select="key('TypeSize',$typeSize)">
<tr>
<td>
<xsl:value-of select="NAME"/>
</td>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template match="PLANT">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Итак, вывод:
<PLANTS>
<table>
<tbody>
<tr>
<td>TYPE :
FRUIT
</td>
</tr>
<tr>
<td>SIZE :
SMALL
</td>
</tr>
<tr>
<td>APPLE</td>
</tr>
<tr>
<td>ORANGE</td>
</tr>
<tr>
<td>SIZE :
BIG
</td>
</tr>
<tr>
<td>WATERMELON</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td>TYPE :
VEGETABLE
</td>
</tr>
<tr>
<td>SIZE :
SMALL
</td>
</tr>
<tr>
<td>CUCUMBER</td>
</tr>
<tr>
<td>CARROT</td>
</tr>
</tbody>
</table>
</PLANTS>
Вывод почти идеальный, но я хочу избавиться от этого тега <PLANTS>
. Как я могу это сделать?
Вы можете найти весь код здесь