<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/pool/xslt_ht.xslt" type="application/xml"?>
<xsl:stylesheet
  xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
  xmlns:d = "http://herbaer.de/xmlns/20051201/doc"
  xmlns:tr = "http://herbaer.de/xmlns/20151222/tree/"
  version = "1.0"
>
<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>tree_sorttlv.xslt</title>
  <subtitle>Knoten der obersten Ebene sortieren</subtitle>
  <date>2017-04-17</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:section xmlns="http://herbaer.de/xmlns/20051201/doc" role="stylesheet">
<para>
Diese Transformation sortiert die Knoten unterhalb der obersten Knoten
in umgekehrter alphabetischer Reihenfolge.
</para>
</d:section>

<xsl:output method="xml" encoding="utf-8"/>

<d:para>Wurzelknoten</d:para>
<xsl:template match="/tr:tree">
  <xsl:copy>
    <xsl:apply-templates select="tr:node"/>
  </xsl:copy>
</xsl:template>

<d:para>Elemente und Attribute werden kopiert</d:para>
<xsl:template match="* | @*">
  <xsl:copy-of select="."/>
</xsl:template>

<d:para>
Knoten unterhalb des Dokument-Knotens werden "absteigend" verarbeitet.
</d:para>
<xsl:template match="tr:node">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:copy-of select="* [local-name(.) != 'node']"/>
    <xsl:for-each select="tr:node">
      <xsl:sort select="tr:name" data-type="number" order="descending"/>
      <xsl:copy-of select="."/>
    </xsl:for-each>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>
