Name eines Elementes ermitteln
André Laugks
- xsl
Hallo!
Ich bin eben mit XSLT auf ein Problem gestoßen. Ich möchte mir die Elementen-Namen anzeigen lassen, die im Moment abgearbeitet werden und zwar unterhalb des Elementes <item>. Innerhalb von xsl:for-each komme ich da aber nicht dran. Ich habe mein XSLT-Buch etc. durchgesucht, aber kein XPath-Ausdruck kann mir helfen. Vielleicht übersehe ich ja was.
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<liste>
<item>
<vorname>Werner</vorname>
<nachname>Schmidt</nachname>
</item>
<item>
<vorname>Inge</vorname>
<nachname>Mayer</nachname>
<ort>Köln</ort>
</item>
</liste>
</root>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="ISO-8859-1" indent="yes" />
<xsl:template match="/root">
<xsl:apply-templates select="liste" />
</xsl:template>
<xsl:template match="liste">
<xsl:for-each select="item">
Name-Element: <xsl:value-of select="?"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
André Laugks
Hallo,
Ich bin eben mit XSLT auf ein Problem gestoßen. Ich möchte mir die Elementen-Namen anzeigen lassen, die im Moment abgearbeitet werden und zwar unterhalb des Elementes <item>. Innerhalb von xsl:for-each komme ich da aber nicht dran. Ich habe mein XSLT-Buch etc. durchgesucht, aber kein XPath-Ausdruck kann mir helfen. Vielleicht übersehe ich ja was.
<xsl:template match="liste">
<xsl:for-each select="item">
Name-Element: <xsl:value-of select="name()"/> oder local-name()
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#name
http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#name
Grüße
Thomas
Hallo!
Name-Element: <xsl:value-of select="name()"/> oder local-name()
Mit name() und local-name() bekomme ich aber "item" angezeigt. Ich würde aber gerne "vorname", "nachname" und "ort" angezeigt bekommen.
André Laugks
Hallo,
Name-Element: <xsl:value-of select="name()"/> oder local-name()
Mit name() und local-name() bekomme ich aber "item" angezeigt. Ich würde aber gerne "vorname", "nachname" und "ort" angezeigt bekommen.
Verstehe.
Je nach dem wie du es brauchst:
<xsl:for-each select="item">
<xsl:for-each select=".//*">
Name-Element: <xsl:value-of select="name()"/>
So bekommst du eine Lister der Namen der Elemente, aber vermutlich in einer einzigen Zeile ohne Zeilenumbruch.
Oder du machst einen Template für die Elemente unter item:
match="item//*"
Name-Element: <xsl:value-of select="name()"/>
...
<xsl:for-each select="item">
<xsl:apply-templates />
Grüße
Thomas
Hallo Thomas!
<xsl:for-each select=".//*">
So bekomme ich auch <item> angezeigt. Ich denke, weil er einen zu hoch geht. Aber ich habe folgendes gemacht:
<xsl:template match="liste">
<xsl:for-each select="item/*">
Name-Element: <xsl:value-of select="name()"/>
</xsl:for-each>
</xsl:template>
Folgendes bekomme ich als Ausgabe:
Name-Element: vorname
Name-Element: nachname
Name-Element: vorname
Name-Element: nachname
Name-Element: ort
Danke für den Denkanstoß!
Oder du machst einen Template für die Elemente unter item:
Ich denke das ist die elegantere Weg.
André Laugks
Hallo André
<xsl:for-each select=".//*">
So bekomme ich auch <item> angezeigt. Ich denke, weil er einen zu hoch geht. Aber ich habe folgendes gemacht:
hm... sollte eigentlich nciht sein, denn es gilt current() "." alle ebenenen "//" elemente "*"
<xsl:template match="liste">
<xsl:for-each select="item/*">
Name-Element: <xsl:value-of select="name()"/>
</xsl:for-each>
</xsl:template>
>
> Folgendes bekomme ich als Ausgabe:
>
> Name-Element: vorname
> Name-Element: nachname
> Name-Element: vorname
> Name-Element: nachname
> Name-Element: ort
>
> Danke für den Denkanstoß!
Ok wenn das reicht. Aber bedenkte dass sich das nur auf die Kindelemente von item auswirkt, aber nicht auf dessen Kindelmenente etc.
Grüße
Thomas