Я пытаюсь создать файл XSLT, который будет создавать новый XML из исходного XML, который будет сортировать узлы типов по имени, а затем сортировать элементы внутри каждого типа.
Источник:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Ontario</members>
<members>Quebec</members>
<members>Alberta</members>
<name>Provinces</name>
</types>
<types>
<members>Vancouver</members>
<members>Calgary</members>
<members>Toronto</members>
<members>Montreal</members>
<name>Cities</name>
</types>
<version>43.0</version>
</Package>
Ожидаемый результат:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Calgary</members>
<members>Montreal</members>
<members>Toronto</members>
<members>Vancouver</members>
<name>Cities</name>
</types>
<types>
<members>Alberta</members>
<members>Ontario</members>
<members>Quebec</members>
<name>Provinces</name>
</types>
<version>43.0</version>
</Package>
Я начал с того, что пытался отсортировать типы по имени, но, похоже, он ничего не сортирует для меня
XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Package">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="types">
<xsl:sort select="name"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>