XSLT рекурсивная сортировка по атрибуту - PullRequest
1 голос
/ 27 марта 2011

Я нашел несколько вопросов и ответов относительно вложенной / рекурсивной сортировки с использованием XSLT, но не смог отобразить это в моей ситуации.

Моя ситуация:

  • элемент "set"может состоять из 0 или более элементов «свойства»
  • элемент «set» может состоять из 0 или более подмножеств
  • элементы set и свойства состоят из атрибута «ключ»
  • Я хочу отсортировать «набор» по атрибуту «ключ», а для каждого «набора»: отсортировать по «ключу» элементов «свойства»

XML выглядит примерно так:

<set key="...">
  <property key="..."/>
  <property key="..."/>
  <property key="..."/>
  <set key="...">
    <set key="...>
      <property key="..."/>
      <property key="..."/>
      <property key="..."/>
    </set>
  </set>
</set>

Предложения?

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

В простых ситуациях это может быть достигнуто так:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()">
                <xsl:sort select="@key" data-type="number"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Применяется к этому XML:

<set key="1">
  <property key="6"/>
  <property key="8"/>
  <property key="1"/>
  <set key="3">
    <set key="0">
      <property key="4"/>
      <property key="2"/>
      <property key="9"/>
    </set>
  </set>
</set>

Результат будет:

<set key="1">
    <property key="1"></property>
    <set key="3">
        <set key="0">
            <property key="2"></property>
            <property key="4"></property>
            <property key="9"></property>
        </set>
    </set>
    <property key="6"></property>
    <property key="8"></property>
</set>

Я думаю, реальное приложение более сложное, но ваш пример не показывает, что .

0 голосов
/ 27 марта 2011

Лично я не думаю, что XSL-T подходит для такого рода вещей.Это язык преобразования XML, а не язык программирования для сортировки.

Я думаю, что было бы лучше использовать правильный инструмент для работы: используйте язык, такой как Java или C #, для создания XML в отсортированной форме,затем используйте XSL-T для его преобразования.

Если вы боретесь с этим, вам, вероятно, следует пересмотреть подход.

...