сортировать список с помощью XSL - PullRequest
1 голос
/ 15 октября 2011

Я нахожусь в фазе обучения XSL. Я сталкиваюсь с проблемой, когда мне нужно отсортировать элементы в зависимости от их даты. Входной XML содержит списки. Каждый объект в списке содержит сложный объект. Мне нужно отсортировать список на основе элемента в сложном объекте. Например <list> <object> <date>2011-10-05<date/> </object> </list> <list> <object> <date>2011-10-04<date/> </object> </list> <list> <object> <date>2011-10-08<date/> </object><br> </list>

Мне нужно отсортировать xml по дате. Можно ли это сделать? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 15 октября 2011

Да, вы можете.

Вы можете использовать несколько элементов xsl: sort для сортировки вашего выбора по нескольким критериям.

Следующее преобразование XSLT 1.0:

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

  <xsl:template match="/">
    <root>
      <xsl:for-each select="root/list">
        <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 1, 4)"/>
        <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 6, 2)"/>
        <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date),9, 2)"/>
        <xsl:copy-of select="."/>
      </xsl:for-each>
    </root>
  </xsl:template>
</xsl:stylesheet>

Применительно к.xml-файл, который я создал на основе вашего неверно сформированного ввода:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <list>
    <object>
      <date>
        2011-10-05
      </date>
    </object>
  </list>
  <list>
    <object>
      <date>
        2011-10-04
      </date>
    </object>
  </list>
  <list>
    <object>
      <date>
        2011-10-08
      </date>
    </object>
  </list>
</root>

даст следующий результат:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <list>
      <object>
         <date>
        2011-10-04
      </date>
      </object>
  </list>
   <list>
      <object>
         <date>
        2011-10-05
      </date>
      </object>
  </list>
   <list>
      <object>
         <date>
        2011-10-08
      </date>
      </object>
  </list>
</root>

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

Я надеюсь, что смогу решить вашу проблему:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...