сортировка элементов xml с использованием атрибута

#xml #xslt

#xml #xslt

Вопрос:

У меня ниже приведен XML, который необходимо отсортировать на основе его атрибута

 <?xml version='1.0' encoding='UTF-8'?>
<metadata xmlns:ame="http://www.abcd.com/ame/md">
    <logicalModel>
        <tables>
            <table ame:include="md/logical/tables/SS_PA_BROKER_EIOPA_CODE.md"/>
            <table ame:include="md/logical/tables/SS_XX_SOURCE_SYSTEM.md"/>
            <table ame:include="md/logical/tables/GL_XX_COUNTRY_CODE.md"/>
            <table ame:include="md/logical/tables/SS_PA_SOURCE_PRODUCT.md"/>
        </tables>
    </logicalModel>
</metadata>
  

Пробовал использовать xsl, но не смог этого сделать.
ожидаемый результат

 <?xml version='1.0' encoding='UTF-8'?>
<metadata xmlns:ame="http://www.abcd.com/ame/md">
    <logicalModel>
        <tables>
            <table ame:include="md/logical/tables/GL_XX_COUNTRY_CODE.md"/>
            <table ame:include="md/logical/tables/SS_PA_BROKER_EIOPA_CODE.md"/>
            <table ame:include="md/logical/tables/SS_XX_SOURCE_SYSTEM.md"/>
            <table ame:include="md/logical/tables/SS_PA_SOURCE_PRODUCT.md"/>
        </tables>
    </logicalModel>
</metadata>
  

Комментарии:

1. Можете ли вы показать, что вы пробовали?

2. Ожидаемый результат не выглядит «отсортированным на основе его атрибута». Пожалуйста, объясните логику, которая должна быть применена здесь.

Ответ №1:

Найдено ниже xsl, который может сортировать все XML-дерево, как ожидалось

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />

  <xsl:template match="@* | node()">
    <xsl:copy>
    <xsl:apply-templates select="@* | node()">
      <xsl:sort select="text() | @*"/>
        </xsl:apply-templates>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
  

введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. Это не приводит к ожидаемому результату: xsltfiddle. liberty-development.net/pNvtBG9

2. И это все еще отличается от результата, полученного вашим кодом.

3. Я не знаю решения проблемы, которую я не понимаю. Я попросил вас объяснить логику, но вы этого не сделали.

4. ОК. может быть, я объясню подробно. выше xsl предоставил отсортированные выходные данные в консоли разработки Chrome, и я могу с этим смириться. в ответ добавлен скриншот инструмента разработки.