Hallo André,
Es ist folgendes XML-Dokument gegeben.
XML-Datei
<?xml version="1.0" encoding="iso-8859-1"?>
<liste>
<eintrag>
<vorname>André</vorname>
<nachname>Laugks</nachname>
</eintrag>
<eintrag>
<vorname>Werner</vorname>
<nachname>Otto</nachname>
</eintrag>
</liste>Mit folgender XSLT-Datei bekomme ich alle Kind-Element ausgegeben.
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="/">
<html>
<body>
xsl:apply-templates/
</body>
</html>
</xsl:template><xsl:template match="eintrag">
<b><xsl:value-of select="."/></b>
</xsl:template></xsl:stylesheet>
Du gibts den Zeichenkettenwert für jedes Eintragelement aus. Der Zeichenkettenwert eines Knoten, der Kindelemente hat, ist die aus den Inhalten der Kindelementen zusammengesetzte Zeichenkette. Somit erhälst du die Ausgabe von Vorname und Nachname jeweils eingeschlossen durch <b>-Tags.
Sobald ich aber <xsl:apply-templates select="eintrag"/> nehme, bekomme ich nichts mehr ausgegeben. Ich wähle doch den Knoten "eintrag" aus?
So bekomme ich wieder was ausgegeben.
<xsl:template match="/liste">
<html>
<body>
<xsl:apply-templates select="eintrag"/>
</body>
</html>
</xsl:template>Aber <xsl:template match="/"> bezieht sich doch auf das Root-Element "liste".
Nein es bezieht sich auf den Wurzel*knoten*, eine abstrakte Wurzel, deren einziges Kind das Wurzel*element* <liste> ist. Du musst daher dieses Element auch noch ansteuern.
So möchte ich mir nur die Vornamen ausgeben lassen. Ich bekomme natürlich auch nichts ausgegeben. Kann ich in dem Pfad nicht springen. Muß ich immer komplet (/liste/eintrag/vorname) referenzieren?
Nein "Springen" geht so nicht, ausser über die eingebauten Template-Rules, aber auch das ist kein Springen, sondern ein Standardverhalten, für den undefinierten Fall.
Du kannst höchstens mit benannten Templates arbeiten und die dann wie Funktionen irgendwo in einem Template aufrufen.
Gruß
Franz