Сортировка в XSLT? - PullRequest
       14

Сортировка в XSLT?

0 голосов
/ 09 февраля 2012

Я новичок в XSLT и хочу преобразовать свои данные XML в таблицу HTML, а затем отсортировать таблицу по полю preis: вот мой код, но он не работает подскажите, пожалуйста, в чем проблема в моем коде:

<xsl:stylesheet>
<xsl:template match="/">
    <html>
      <body>
        <h1>
          Hallo
        </h1>
        <table border="1">

          <xsl:apply-templates>
            <xsl:sort select="preis" data-type="number" order="ascending"/>
          </xsl:apply-templates>

        </table>  
      </body>
    </html>
  </xsl:template>
  <xsl:template match="artikel">
    <tr>

      <xsl:apply-templates select="name" />
      <xsl:apply-templates select="lieferant" />
      <xsl:apply-templates select="preis"/>
    </tr> 
  </xsl:template>
  <xsl:template match="name|lieferant|preis">
    <td>
      <xsl:value-of select="."/>
    </td> 
  </xsl:template>

</xsl:stylesheet>

и XML-файл:

<lieferungen>
  <artikel id="3526">
    <name>apfel</name>
    <lieferant>Fa. Krause</lieferant>
    <preis stueckpreis="true">8.97</preis>
  </artikel>
  <artikel id="7866">
    <name>Kirschen</name>
    <preis stueckpreis="false">10.45</preis>
    <lieferant>Fa. Helbig</lieferant>
  </artikel>
  <artikel id="3526">
    <preis stueckpreis="true">12.67</preis>
    <lieferant>Fa. Liebig</lieferant>
    <name>apfel</name>
  </artikel>
  <artikel id="7866">
    <preis stueckpreis="false">17.67</preis>
    <name>Kirschen</name>
    <lieferant>Fa. Krause</lieferant>
  </artikel>
  <artikel id="3627">
    <name>apfel</name>
    <lieferant>Fa. Mertes</lieferant>
    <preis stueckpreis="true">9.54</preis>
  </artikel>
  <artikel id="7866">
    <name>Kirschen</name>
    <lieferant>Fa. Hoeller</lieferant>
    <preis stueckpreis="false">16.45</preis>
  </artikel>
  <artikel id="7868">
    <preis>3.20</preis>
    <name>Kohl</name>
    <lieferant>Fa. Hoeller</lieferant>
  </artikel>
  <artikel id="7866">
    <name>Kirschen</name>
    <lieferant>Fa. Richard</lieferant>
    <preis stueckpreis="false">12.45</preis>
  </artikel>
  <artikel id="3245">
    <preis stueckpreis="false">15.67</preis>
    <name>Bananen</name>
    <lieferant>Fa. Hoeller</lieferant>
  </artikel>
  <artikel id="6745">
    <name>Kohl</name>
    <lieferant>Fa. Reinhardt</lieferant>
    <preis stueckpreis="false">3.10</preis>
  </artikel>
  <artikel id="7789">
    <name>Ananas</name>
    <preis stueckpreis="true">8.60</preis>
    <lieferant>Fa. Richard</lieferant>
  </artikel>
</lieferungen>

1 Ответ

0 голосов
/ 09 февраля 2012

Это должно работать, если я понял ваш вопрос

Кстати!Порядок дочерних тегов внутри тега article не одинаков для всех статей

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<xsl:for-each select="lieferungen/artikel">
<xsl:sort select="preis" data-type="number" order="ascending"/>
    <td>
      <xsl:copy-of select="."/>
    </td>
</xsl:for-each>
</xsl:template>

</xsl:transform>

Выходы:

<td xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <artikel id="6745">
    <name>Kohl</name>
    <lieferant>Fa. Reinhardt</lieferant>
    <preis stueckpreis="false">3.10</preis>
</artikel>
</td>
<td xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <artikel id="7868">
    <preis>3.20</preis>
    <name>Kohl</name>
    <lieferant>Fa. Hoeller</lieferant>
  </artikel>
</td>
<td xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <artikel id="7789">
    <name>Ananas</name>
    <preis stueckpreis="true">8.60</preis>
    <lieferant>Fa. Richard</lieferant>
  </artikel>
</td>
...
...
<td xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <artikel id="7866">
    <preis stueckpreis="false">17.67</preis>
    <name>Kirschen</name>
    <lieferant>Fa. Krause</lieferant>
  </artikel>
</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...