Сортировка узлов файла XML - PullRequest
1 голос
/ 08 апреля 2011

Я новичок в XSLT, и хотя до сих пор я успешно выполнил много задач ... сортировка доставляет мне трудности.

Мне нужна помощь с небольшим примером, чтобы я мог понятьxsl: сортировать лучше.

Мои данные XML выглядят следующим образом:

<NewTerms>
  <newTerm>Zebra</newTerm>
  <newTerm>Horse</newTerm>
  <newTerm>Cat</newTerm>
  <newTerm>Lion</newTerm>
  <newTerm>Jaguar</newTerm>
  <newTerm>Cheetah</newTerm>
  <newTerm>Deer</newTerm>
  <newTerm>Buffalo</newTerm>
  <newTerm>Dog</newTerm>
</NewTerms>

, и я просто хочу отсортировать их по алфавиту из листа xsl.Xsl, который я написал (и который не работает), выглядит следующим образом:

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

  <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>

  <xsl:template match="NewTerms">

      <xsl:apply-templates>
        <xsl:sort select="newTerm"/>
      </xsl:apply-templates>

  </xsl:template>  

</xsl:stylesheet>

Я очень уверен, что не понял, как работает функция xsl: sort.Если вы поможете мне в этом крошечном примере ... Думаю, я лучше пойму его.

Спасибо.

Жасмин

Ответы [ 2 ]

5 голосов
/ 08 апреля 2011

Я предполагаю, что вы хотите, чтобы в качестве выходных данных снова использовалась допустимая структура XML, потому что в вашем <xsl:output> метод - "XML". Вы можете попробовать это:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
version="1.0">

<xsl:output method="xml" indent="yes" omit-xml-declaration="no" />
<xsl:strip-space elements="*"/>

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

</xsl:stylesheet>

, который дает этот вывод:

<?xml version="1.0" encoding="UTF-8"?>
<NewTerms>
<newTerm>Buffalo</newTerm>
<newTerm>Cat</newTerm>
<newTerm>Cheetah</newTerm>
<newTerm>Deer</newTerm>
<newTerm>Dog</newTerm>
<newTerm>Horse</newTerm>
<newTerm>Jaguar</newTerm>
<newTerm>Lion</newTerm>
<newTerm>Zebra</newTerm>
</NewTerms>

Это тебе помогает?

Вы также можете посмотреть определение вида, например: http://www.w3schools.com/xsl/el_sort.asp http://www.w3.org/TR/xslt#sorting

С наилучшими пожеланиями, Питер

2 голосов
/ 08 апреля 2011
<xsl:template match="NewTerms">
 <xsl:apply-templates>
  <xsl:sort select="newTerm"/>
 </xsl:apply-templates>
</xsl:template>   

Я очень уверен, что у меня нет понял, как xsl: функция сортировки

Вы правы. От http://www.w3.org/TR/xslt#sorting

xsl:sort имеет атрибут select чье значение является выражением. Для каждого обрабатываемый узел, выражение оценивается с этим узлом как текущий узел и с полным список узлов, обрабатываемых в несортированный порядок в качестве текущего узла list. * Полученный объект конвертируется в строку как при вызове к функции string; этот строка используется в качестве ключа сортировки этот узел. Значение по умолчанию select атрибут ., который будет вызвать строковое значение текущего узел, который будет использоваться в качестве ключа сортировки.

* Акцент на шахте.

Вы хотите:

<xsl:template match="NewTerms">
 <xsl:apply-templates>
  <xsl:sort/>
 </xsl:apply-templates>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...