Я унаследовал код, где я не совсем понимаю, почему он не работает, но я также хочу, чтобы он делал больше. Очевидная проблема заключается в том, что group-by
никогда не найдет группу, потому что атрибут, который он ищет, всегда является уникальным значением для каждого элемента. Кроме того, я также ищу сортировку в естественном порядке. Из того, что я могу найти, я думаю, что мне может понадобиться сначала отсортировать группу по буквам, а затем отсортировать результат по номерам, но я не уверен. В настоящее время даже базовая сортировка, которая есть, не работает. Существующий код XSLT:
<xsl:for-each-group select="datafield[@tag='856']" group-by="subfield[@code='u']">
<xsl:sort select="number(normalize-space(substring-after(subfield[@code='z'], ',')))"/>
<xsl:copy-of select="."/>
</xsl:for-each-group>
Используя эти данные:
<collection>
<record>
<datafield ind1="4" ind2="1" tag="856">
<subfield code="u">https://www.example.com/ride02meys</subfield>
<subfield code="z">Digital item, v.2</subfield>
</datafield>
<datafield ind1="4" ind2="1" tag="856">
<subfield code="u">https://www.example.com/ride01meys</subfield>
<subfield code="z">Digital item, v.1</subfield>
</datafield>
<datafield ind1="4" ind2="1" tag="856">
<subfield code="u">https://www.example.com/ride12meys</subfield>
<subfield code="z">Digital item, v.12</subfield>
</record>
</collection>
Я пытаюсь получить следующее, где оно отсортировано как 1, 2, 12, а не 1, 12, 2.
<collection>
<record>
<datafield ind1="4" ind2="1" tag="856">
<subfield code="u">https://www.example.com/ride01meys</subfield>
<subfield code="z">Digital item, v.1</subfield>
</datafield>
<datafield ind1="4" ind2="1" tag="856">
<subfield code="u">https://www.example.com/ride02meys</subfield>
<subfield code="z">Digital item, v.2</subfield>
</datafield>
<datafield ind1="4" ind2="1" tag="856">
<subfield code="u">https://www.example.com/ride12meys</subfield>
<subfield code="z">Digital item, v.12</subfield>
</record>
</collection>
Я, по общему признанию, слаб с XSLT, поэтому любые рекомендации будут оценены.
Заранее спасибо