Я пытаюсь отсортировать элементы меток в алфавитном порядке в документе KML. Документ содержит несколько элементов папки, которые я не хочу менять. Мне нужно только отсортировать метки внутри каждой папки.
Пример ввода:
<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Test</name>
<Folder>
<name>Zulu</name>
<Placemark>
<name>Bravo</name>
<Point>
<coordinates>
20,30,0
</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Alfa</name>
<Point>
<coordinates>
10,20,0
</coordinates>
</Point>
</Placemark>
</Folder>
<Folder>
<name>Yankee</name>
<Placemark>
<name>Delta</name>
<Point>
<coordinates>
40,50,0
</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Charlie</name>
<Point>
<coordinates>
30,40,0
</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
Ожидаемый результат:
<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Test</name>
<Folder>
<name>Zulu</name>
<Placemark>
<name>Alfa</name>
<Point>
<coordinates>
10,20,0
</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Bravo</name>
<Point>
<coordinates>
20,30,0
</coordinates>
</Point>
</Placemark>
</Folder>
<Folder>
<name>Yankee</name>
<Placemark>
<name>Charlie</name>
<Point>
<coordinates>
30,40,0
</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Delta</name>
<Point>
<coordinates>
40,50,0
</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
Я пробовал следующую таблицу стилей XSLT 3.0:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output name="xml"/>
<xsl:mode on-no-match="shallow-copy" />
<xsl:template match="Folder">
<xsl:perform-sort select="Folder/Placemark">
<xsl:sort select="name" data-type="text" order="ascending"/>
</xsl:perform-sort>
</xsl:template>
</xsl:stylesheet>
Это ничего не делает. Я пытаюсь использовать XSLT 3.0, так как это последняя версия c. Я использую Saxon для запуска преобразования (в случае, если это имеет значение):
java -jar Saxon-HE-10.0.jar -s:source.kml -xsl:sort.xsl -o:output.kml
Если кто-то знает, как это сделать с XSLT 1.0 или 2.0, я возьму его, но предпочел бы XSLT 3.0.
Приветствия