Smart: Ausgabe

Hallo,

ich habe da ein Problem mit XSL-Ausgabe.
Wie ihr unten sieht, habe ich drei Dateien und möchte über eine
fro-each-Schleife die Knoten auszugeben. Das klappt aber nicht
und ich bekomme nichts zu sehen. Kann jemand da den Fehler
erkennen?

Danke im Voraus.

fahrplan.dtd

<!ELEMENT fahrplan  (bahnhof)>
<!ELEMENT bahnhof   (name,(ereignis)*)>
<!ELEMENT name      (#PCDATA)>
<!ELEMENT ereignis  (abfahrt | ankunft)>
<!ELEMENT abfahrt   (zeit,zugtyp,zugnr,route)>
<!ATTLIST abfahrt
     name CDATA #REQUIRED>
<!ELEMENT ankunft   (zeit,zugtyp,zugnr,route)>
<!ATTLIST abfahrt
     name CDATA #REQUIRED>
<!ELEMENT zeit      (#PCDATA)>
<!ELEMENT zugtyp    (#PCDATA)>
<!ELEMENT zugnr     (#PCDATA)>
<!ELEMENT route     (#PCDATA | start | ziel)*>
<!ELEMENT start     (#PCDATA)>
<!ELEMENT ziel      (#PCDATA)>

fahrplan.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE fahrplan SYSTEM "fahrplan.dtd">
<?xml-stylesheet type="text/xsl" href="fahrplan.xsl" ?>

<fahrplan>
 <bahnhof>
  <name>Frankfurt HBF</name>
   <ereignis>
     <art name="Abfahrt">
 <zeit>10.24</zeit>
 <zugtyp>IC</zugtyp>
 <zugnr>234</zugnr>
 <route>Nürnberg 11.48, Regensburg 12.50, Passau 13.38, Linz 14.22
   <ziel>Wien West an 17.55</ziel>
 </route>
     </art>
   </ereignis>
   <ereignis>
      <art name="Ankunft">
 <zeit>10.36</zeit>
 <zugtyp>RB</zugtyp>
 <zugnr>20392</zugnr>
 <route><start>Koblenz ab 08.57</start>
 Bacherach 09.16, St. Goar 09.42, Mainz 10.05, Ffm Flughafen 10.25
 </route>
       </art>
   </ereignis>
   ....
 </bahnhof>

fahrplan.xsl

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

<xsl:template match="/">
 <html>
   <head><title>Test-Fahrplan</title></head>
   <body>
 <table border="1" width="500" bgcolor="#808080">
    <xsl:for-each select="fahrplan/bahnhof/ergebnis/art">
   <tr>
     <td><xsl:value-of select="zeit" /></td>
     <td><xsl:value-of select="zugtyp" /></td>
     <td><xsl:value-of select="zugnr" /></td>
     <td><xsl:value-of select="route" /></td>
   </tr>
   </xsl:for-each>
 </table>
    </body>
  </html>
</xsl:template>
</xsl:stylesheet>

</fahrplan>

  1. Hi,

    <ereignis>
        <xsl:for-each select="fahrplan/bahnhof/ergebnis/art">

    ergebnis ist nicht ereignis.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi,

      danke. Ich glaube, es ist an der Zeit, eine neue Brille zu kaufen. :-)

      Noch eine Frage. Wie du gesehen hast, hat das Element route ein unterelement
      ziel. Mit <td><xsl:value-of select="route" /></td> bekomme ich alles
      samt ziel heraus. Wie kann ich da nur den Text ausgeben? Ich möchte da das Ziel
      z.B. anders formatiere oder färben und dann ausgeben.

      Dnake

      1. Hi,

        danke. Ich glaube, es ist an der Zeit, eine neue Brille zu kaufen. :-)

        So ist das halt, wenn man den Baum vor lauter Ästen nicht sieht ;-)

        Noch eine Frage. Wie du gesehen hast, hat das Element route ein unterelement
        ziel. Mit <td><xsl:value-of select="route" /></td> bekomme ich alles
        samt ziel heraus. Wie kann ich da nur den Text ausgeben? Ich möchte da das Ziel
        z.B. anders formatiere oder färben und dann ausgeben.

        Gib nicht den gesamten value aus, sondern nur route/text() (oder so ähnlich).
        Falls das nicht wie gewünscht funktioniert:
        Strukturiere das XML um - pack den Text, der jetzt direkt in route steht, nochmal in ein sub-Element - das kannst Du dann auf jeden Fall per XPath direkt ansprechen.
        Und ruf dann die Templates für die Kind-Elemente auf und bau für ziel-Elemente ein eigenes Template, das die gewünschte Ausgabe erzeugt.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. Hallo,

        Noch eine Frage. Wie du gesehen hast, hat das Element route ein unterelement
        ziel. Mit <td><xsl:value-of select="route" /></td> bekomme ich alles
        samt ziel heraus. Wie kann ich da nur den Text ausgeben? Ich möchte da das Ziel
        z.B. anders formatiere oder färben und dann ausgeben.

        <td><xsl:apply-templates select="route" /></td>

        <xsl:template match="route">
          <span class="route"><!-- formatiere es mit css -->
            <xsl:value-of select="." />
          </span>
        </xsl:template>

        <xsl:template match="ziel">
           <span class="ziel"><!-- formatiere es mit css -->
            <xsl:value-of select="." />
          </span>
        xsl:template

        Grüße
        Thomas