André Laugks: xsl:template und Pfad

Hallo!

So, ich habe mich mal wieder mit XSLT befasst und bin auf folgende Sache gestoßen. Als Beispiel nehme ich die XML-Datei (Fahrplan) von http://selfhtml.teamone.de/xml/darstellung/css.htm#fahrplanbeispiel.

<!-- Anfang: XSLT-Datei -->
<?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="/fahrplan">
  <html>
    <body>
       <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>
    </body>
  </html>
</xsl:template>

<xsl:template match="bahnhof/ereignis/abfahrt">
  xsl:value-of select="zeit"/><br/>
</xsl:template>

</xsl:stylesheet>
<!-- Ende: XSLT-Datei -->

Wieso wird mir die Zeit ausgegeben?

Auch mit

<xsl:template match="ereignis/abfahrt">
       <xsl:value-of select="zeit"/><br/>
    </xsl:template>

wird mir die Zeit ausgegeben.

MfG, André Laugks

  1. Hallo André,

    aus welchem Grund erwartest Du denn, dass die Zeit nicht ausgegeben wird ?

    Gruss

    Marko

    1. Hallo!

      aus welchem Grund erwartest Du denn, dass die Zeit nicht ausgegeben wird ?

      Vielleicht übersehe ich es, aber wieso kann ich mit <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>, <xsl:template match="bahnhof/ereignis/abfahrt"> und  <xsl:template match="ereignis/abfahrt"> ansteuern?

      Ich hätte nur <xsl:template match="abfahrt"> erwartet? Kann ich es ansteuern weil "bahnhof/ereignis/abfahrt" oder "ereignis/abfahr" in der Pfadreihenfolge her stimmt und jeweils am Ende anfahrt steht und wird somit das richtige Template gefunden?

      Weil sobald ich "<xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>" entferne, geht es nicht mehr.

      Keine Ahnung, mir ist das heute das erste mal aufgefallen.

      <xsl:template match="/fahrplan">
        <html>
          <body>
             <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>
          </body>
        </html>
      </xsl:template>

      <xsl:template match="bahnhof/ereignis/abfahrt">
      .
      .
      .

      <xsl:template match="ereignis/abfahrt">
      .
      .
      .

      MfG, André Laugks

      --
      L-Andre @ gmx.de
  2. Hallo André,

    <!-- Anfang: XSLT-Datei -->
    <?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="/fahrplan">
      <html>
        <body>
           <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>
        </body>
      </html>
    </xsl:template>

    <xsl:template match="bahnhof/ereignis/abfahrt">
      xsl:value-of select="zeit"/><br/>
    </xsl:template>

    </xsl:stylesheet>
    <!-- Ende: XSLT-Datei -->

    Wieso wird mir die Zeit ausgegeben?

    Auch mit

    <xsl:template match="ereignis/abfahrt">
           <xsl:value-of select="zeit"/><br/>
        </xsl:template>

    wird mir die Zeit ausgegeben.

    Irgendwie verstehe ich deine Frage nicht:
    Die Zeit würde dir auch mit
    <xsl:template match="abfahrt">
    ausgegeben, denn du holst die Templates mit
    <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>
    hättest du
    <xsl:apply-templates select="bahnhof/ereignis/abfahrt[@id = 'bla']"/> angegeben, würde dir nichts erscheinen.

    Grüße
    Thomas

    1. Hallo Thomas!

      Irgendwie verstehe ich deine Frage nicht:
      Die Zeit würde dir auch mit
      <xsl:template match="abfahrt">
      ausgegeben, denn du holst die Templates mit
      <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>
      hättest du
      <xsl:apply-templates select="bahnhof/ereignis/abfahrt[@id = 'bla']"/> angegeben, würde dir nichts erscheinen.

      <xsl:template match="/fahrplan">
        <html>
          <body>
             <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>
          </body>
        </html>
      </xsl:template>

      <!-- Nr 1. -->
      <xsl:template match="bahnhof/ereignis/abfahrt">
        <xsl:value-of select="zeit"/><br/>
      </xsl:template>

      <!-- Nr 2. -->
      <xsl:template match="ereignis/abfahrt">
        <xsl:value-of select="zeit"/><br/>
      </xsl:template>

      <!-- Nr 3. -->
      <xsl:template match="abfahrt">
        <xsl:value-of select="zeit"/><br/>
      </xsl:template>

      </xsl:stylesheet>

      Ich bekomme jeweils mit Template Nr. 1-3 die Zeit ausgegeben. Für mich ist nur Nr. 3 logisch. Das ist das ich gerade nicht verstehe, wieso ich mit Template Nr. 1 und Nr. 2 auch die Zeit bekomme.

      MfG, André Laugks

      --
      L-Andre @ gmx.de
      1. Hallo André,

        Das ist das ich gerade nicht verstehe, wieso ich mit Template Nr. 1 und Nr. 2 auch die Zeit bekomme.

        ------------------------
        Vielleicht übersehe ich es, aber wieso kann ich mit <xsl:apply-templates select="bahnhof/ereignis/abfahrt"/>, <xsl:template match="bahnhof/ereignis/abfahrt"> und  <xsl:template match="ereignis/abfahrt"> ansteuern?
        ------------------------

        Genau deshalb:
        ------------------------
        Kann ich es ansteuern weil "bahnhof/ereignis/abfahrt" oder "ereignis/abfahr" in der Pfadreihenfolge her stimmt und jeweils am Ende anfahrt steht und wird somit das richtige Template gefunden?
        ------------------------

        Der Pfad ist richtig und es wird das richtige Element "abfahrt" gefunden.

        Grüße
        Thomas

        1. Hallo!

          Der Pfad ist richtig und es wird das richtige Element "abfahrt" gefunden.

          So habe ich mir das auch schon gedacht, aber man kann sich ja auch manchmal was schön interpretieren.

          MfG, André Laugks

          --
          L-Andre @ gmx.de