xsl: сортировка узлов по значениям подузла - PullRequest
3 голосов
/ 16 октября 2011

Можно ли отсортировать следующий xml с помощью xsl (отсортировать подгруппу в группе по дате в формате мм / дд / гггг):

<Data version="2.0">
   <Group>
        <SubGroup>          
            <Date>11/14/2011</Date>
        </SubGroup>
        <SubGroup>          
            <Date>10/25/2011</Date>
        </SubGroup>
   </Group>
   <Group>
        <SubGroup>
            <Date>01/14/2008</Date>
        </SubGroup>
        <SubGroup>          
            <Date>11/01/2005</Date>
        </SubGroup>
   </Group>
</Data>

к этому:

<Data version="2.0">
   <Group>
        <SubGroup>
            <Date>10/25/2011</Date>
        </SubGroup>
        <SubGroup>          
            <Date>11/14/2011</Date>
        </SubGroup>
   </Group>
   <Group>
        <SubGroup>
            <Date>11/01/2005</Date>
        </SubGroup>
        <SubGroup>          
            <Date>01/14/2008</Date>
        </SubGroup>
   </Group>
</Data>

Как мне кажется, есть две задачи: 1) сортировка подгрупп по значениям во внутреннем узле 2) сортировка по дате в специальном формате. Пожалуйста, оставьте ответ, если вы знаете, как решить проблему (1) для сортировки по целым значениям вместо даты.

1 Ответ

3 голосов
/ 16 октября 2011
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="Group">
    <xsl:copy>
      <xsl:apply-templates select="SubGroup">
        <xsl:sort select="concat(
                  substring(Date, 7, 4),
                  substring(Date, 1, 2),
                  substring(Date, 4, 2)
                  )"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

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

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