Мне нужно сгруппировать значения на основе определенных атрибутов. Поэтому я хотел бы использовать для каждой группы.
Это входной XML, который я использую:
<?xml version="1.0" encoding="ISO-8859-1"?>
<cities>
<city country="Germany" continent="Europe">Munich</city>
<city country="Germany" continent="Europe">Dortmund</city>
<city country="France" continent="Europe">Brest</city>
<city country="Japan" continent="Asia" >Tokyo</city>
<city country="Korea" continent="Asia" >Seoul</city>
<city country="Germany" continent="Europe">Hannover</city>
<city country="Poland" continent="Europe">Krakau</city>
<city country="Russia" continent="Asia" >Omsk</city>
<city country="Japan" continent="Asia" >Kobe</city>
<city country="Japan" continent="Asia" >Ibaraki</city>
<city country="Russia" continent="Europe">St. Petersburg</city>
<city country="Saudi-Arabia" continent="Africa">Riad</city>
<city country="Ireland" continent="Europe">Galway</city>
<city country="Cameroon" continent="Africa">Yaoundé</city>
<city country="Austria" continent="Europe">Vienna</city>
</cities>
Теперь я хочу создать выходной файл в формате вложенного списка.
Прежде всего я хочу сгруппировать по континентам, а затем внутренне по странам, т. е. сгруппировать города внутри стран и континентов.
Вывод должен выглядеть примерно так:
<ul>
<li>Europe
<ul>
<li>Germany
<ul>
<li>Munich</li>
<li>Dortmund</li>
<li>...</li>
</ul>
</li>
<li>France
<ul>
<li>...</li>
</ul>
</li>
</ul>
</li>
<li>Asia
<ul>...</ul>
</li>
<li>Africa
<ul>...</ul>
</li>
</ul>
На данный момент у меня есть следующая таблица стилей XSLT:
<xsl:template match="cities">
<ul>
<xsl:for-each-group select="city" group-by="@continent">
<li>
<xsl:value-of select="@continent" />
<xsl:for-each-group select="stadt" group-by="@land">
<ul>
<li>
<xsl:value-of select="@land" />
</li>
</ul>
</xsl:for-each-group>
</li>
</xsl:for-each-group>
</ul>
</xsl:template>
Это отлично работает для первого уровня, т.е. группировки по континентам. Но это не работает для вложенных уровней в списке. Мне нужен способ сослаться на текущий элемент группировки, чтобы группировать по странам только для текущего континента.
Каким будет лучший/самый удобный способ сделать это?