André Laugks: Baum zur Tranformierung anlegen

Beitrag lesen

Hallo!

Ich habe folgendes XML-Dokument gegeben. Ich möchte damit folgendes machen. Es soll nach den Namen sortiert werden und zu jedem Namen dessen Vorgänger und Nachfolger ermittelt werden. Das Problem ist, bei der Ermittlung des Vorgängers und Nachfolgers, wird die Reihenfolge der Elemente im XML-Dokumentes verwendet und nicht die sortierte Reihenfolge.

Das Dokument mit dem ich experimentiere ist viel viel viel umfangreicher als das hier aufgeführte. Kann ich ein virtuelles XML-Dokument generieren bzw. Teilbäume virtuell extrahieren und zusammen fassen, mit denen ich arbeiten kann? Ich baue also für die Tranformierungsvorgang virtuell ein Dokument bzw. Baum auf, in dem alle Element "eintrag" sortiert nach dem Element "name" stehen. In diesem Baum kann ich dann schön den Vorgänger und Nachfolger ermitteln.

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="zappen.xsl" type="text/xsl"?>
<liste>
 <eintrag id="10">
  <name>Berta</name>
 </eintrag>
 <eintrag id="3">
  <name>Anton</name>
 </eintrag>
 <eintrag id="9">
  <name>Dieter</name>
 </eintrag>
 <eintrag id="12">
  <name>Werner</name>
 </eintrag>
 <eintrag id="17">
  <name>Gerd</name>
 </eintrag>
 <eintrag id="8">
  <name>Christian</name>
 </eintrag>
 <eintrag id="6">
  <name>Lisa</name>
 </eintrag>
 <eintrag id="5">
  <name>Inge</name>
 </eintrag>
 <eintrag id="16">
  <name>Friedrich</name>
 </eintrag>
</liste>

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" indent="yes"/>

<xsl:template match="liste">
  <table border="1">
   <tr>
    <td>Vorgänger</td>
    <td>x</td>
    <td>Nachfolger</td>
   </tr>
   <xsl:apply-templates select="eintrag">
    <xsl:sort select="name"/>
   </xsl:apply-templates>
  </table>
 </xsl:template>

<xsl:template match="eintrag">
  <tr>
   <td><xsl:value-of select="preceding-sibling::eintrag[1]/name"/></td>
   <td><xsl:value-of select="name"/></td>
   <td><xsl:value-of select="following-sibling::eintrag[1]/name"/></td>
  </tr>
 </xsl:template>

</xsl:stylesheet>

MfG, André Laugks

--
L-Andre @ gmx.de