XSL Сортировка по позиции () дает странные результаты - PullRequest
0 голосов
/ 09 августа 2010

У меня есть XML-файл, содержимое которого я хочу отсортировать по порядку документа (в основном в том порядке, в котором элементы были выписаны).

В настоящее время я использую следующий код:

<xsl:template match="/Error">
        <xsl:apply-templates>
            <xsl:sort select="position()" order="descending" />
        </xsl:apply-templates>
</xsl:template>

<xsl:template match="/Error/Warning">
<!-- etc -->
</xsl:template>

Пример XML (данные заменены для простоты чтения):

<Error>
<Warning data="stuff" timestamp="08:26:17 2010/08/01">CODE.1</Warning>
<Clear data="stuff" timestamp="08:26:36 2010/08/01">CODE.2</Clear>
<Warning data="stuff" timestamp="08:36:00 2010/08/01">CODE.3</Warning>
<Clear data="stuff" timestamp="08:36:56 2010/08/01">CODE.4</Clear>
<Warning data="stuff" timestamp="08:40:31 2010/08/01">CODE.5</Warning>
</Error>

Это, однако, дает странные результаты, так как кажется, что это не в каком-то определенном порядке!Любые идеи?

Удаление сортировки, кажется, заставляет ее работать должным образом - это будет надежно упорядочивать ее в порядке записи или это не гарантируется?

Ответы [ 3 ]

1 голос
/ 09 августа 2010

<xsl:apply-templates /> работает с выбранным набором узлов в порядке документа, удаляет элемент сортировки, и это будет работать как нужноСм .: Применение правил шаблона

1 голос
/ 09 августа 2010

Не должно ли быть так?используя атрибут select в apply-templates?

<xsl:template match="/Error">
  <xsl:apply-templates select="./Warning" />
</xsl:template>

<xsl:template match="/Error/Warning">
  <!-- etc -->
</xsl:template>

Вы должны получить выходные данные в том порядке, в каком они находятся в источнике XML.

1 голос
/ 09 августа 2010

Вы не пропустили, к каким узлам вы хотите применить шаблон?

например:

<xsl:apply-templates select="/Error/messages" />

было бы неплохо иметь xml, с которым вы работаете, при решении проблемы xslt.

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