Я пытаюсь сортировать список магазинов сначала по провинциям, а затем по городу. Вот пример XML:xsl: сортировать файл XML с использованием двух разных узлов
<store>
<name>Duncan's</name>
<town>Waterloo</town>
<province>Ontario</province>
</store>
<store>
<name>Anne's</name>
<town>Waterloo</town>
<province>Ontario</province>
</store>
<store>
<name>Apple Variety</name>
<town>Woodstock</town>
<province>Ontario</province>
</store>
<store>
<name>Goose Market</name>
<town>Sackville</town>
<province>New Brunswick</province>
</store>
<store>
<name>Family Market</name>
<town>Sackville</town>
<province>New Brunswick</province>
</store>
Я был в состоянии успешно сортировать данные по городу, используя этот код:
<xsl:key name="towns" match="store" use="town"/>
<xsl:for-each select="//store[generate-id(.)=generate-id(key('towns', town)[1])]">
<xsl:sort select="town"/>
<xsl:for-each select="key('towns', town)">
<xsl:sort select="name"/>
<xsl:if test="position() = 1">
<h2>
<xsl:value-of select="town"/>
</h2>
</xsl:if>
<b> <xsl:value-of select="name"/></b> <br/>
<br/> <br/>
</xsl:for-each>
</xsl:for-each>
Как бы использовать ключ первого сорта по провинции, в котором перечислены все магазины в Нью-Брансуик (в алфавитном порядке сначала по городу, затем по имени), а затем в Онтарио? Или есть лучший способ сделать это, не используя ключ? Благодаря!
Вы говорите, что вы * сортируете *, но вы также * группируете *. Неясно, хотите ли вы также группировать по провинции или просто сортировать по ней. Вы можете сортировать без ключа, но вам это нужно, чтобы сгруппировать. –
Да, я бы хотел сгруппировать, а также сортировать. Итак, первая группа и сортировка по провинциям, затем группируйте и сортируйте по названию города (в пределах этих провинциальных групп), затем, наконец, сортируйте по имени магазина (в пределах этих городских групп) –