Я пытаюсь канонизировать представление некоторых данных XML, сортируя атрибуты каждого элемента по имени (не значение). Идея заключается в том, чтобы сохранить текстовые различия минимальными, когда атрибуты добавлены или удалены, а также чтобы другие редакторы не вводили эквивалентные варианты. Эти файлы XML находятся под контролем источника, и разработчики хотят изменить изменения, не прибегая к специализированным инструментам XML.
Я был удивлен тем, что не нашел XSL-пример того, как это сделать. В основном я хочу только преобразование идентичности с отсортированными атрибутами. Я придумал следующее, похоже, работает во всех моих тестовых случаях:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="*|/|text()|comment()|processing-instruction()">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:sort select="name(.)"/>
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Как полный XSL n00b, я был бы признателен за любые комментарии по стилю или эффективности. Я подумал, что было бы полезно опубликовать его здесь, так как это, по крайней мере, не общий пример.