Alle Einträge aus XML
Maik
- xsl
0 Dubaischeich0 Thomas J.S.0 MudGuard
Hallo,
ich wollte alle Einträge einer XML Datei ausgeben(in der Reihenfolge in der sie auch in der XML Datei stehen).
-Ich dachte es geht so:
<xsl:for-each select="."> // alle Einträge
xsl:choose // Jetzt wollte ich die verschiedenen Tags
// identifizieren (damit ich jeden Tag
//anders Formatieren kann)
<xsl:when test="test">
<xsl:value-of select="test/text()"/>
</xsl:when>
<xsl:when test="form">
<xsl:value-of select="form/text()"/>
</xsl:when>
<xsl:when test="form/kreis">
<xsl:value-of select="form/kreis/text()"/>
</xsl:when>
Leider Funktionier es so nicht. Ich kriege immer nur den ersten Eintrag(also test="test")! Wenn ich test="form" als erstes in die Choose Anweisung schreibe, bekomme ich NUR test="form". Ich dachte <xsl:for-each select="."> durchläuft alle Einträge?
Gruß
Maik
Hi,
ich wollte alle Einträge einer XML Datei ausgeben(in der Reihenfolge in der sie auch in der XML Datei stehen).
versuch das mal wenn einfach nur alles ausgegeben werden soll:
<?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="text" indent="no" media-type="text/plain" />
<xsl:template match="/">
xsl:apply-templates/
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(current())" />
</xsl:template>
</xsl:stylesheet>
ciao,
dubaischeich
Hallo,
<xsl:for-each select="."> // alle Einträge
Das war dein Fehler, der Punkt "." meint current node d.h. gegenwärtiger Knoten.
Was du wohl meintest ist: <xsl:for-each select="*"> was hier alle Elemente meint, aber nicht desto trotz nur innerhalb des Elementes in dessen Template dein for-each steht.
Güße
Thomas
Hi,
ich wollte alle Einträge einer XML Datei ausgeben(in der Reihenfolge in der sie auch in der XML Datei stehen).
-Ich dachte es geht so:<xsl:for-each select="."> // alle Einträge
xsl:choose // Jetzt wollte ich die verschiedenen Tags
// identifizieren (damit ich jeden Tag
//anders Formatieren kann)
Du kennst xsl:template und xsl:apply-templates?
xsl:for-each ist fast immer durch templates zu ersetzen - und in diesem Fall garantiert.
(wann immer möglich benutze ich xsl:apply-templates/xsl:template anstelle von xsl:for-each - dadurch habe ich zwar viele, aber oft sehr kleine, gut überschaubare templates)
<xsl:when test="test">
im test-Attribut muß eine Bedingung stehen. "test" ist keine Bedingung, sondern ein String - der dürfte immer als wahr ausgewertet werden, also wird immer nur dieser Zweig erreicht...
Leider Funktionier es so nicht. Ich kriege immer nur den ersten Eintrag(also test="test")! Wenn ich test="form" als erstes in die Choose Anweisung schreibe, bekomme ich NUR test="form". Ich dachte <xsl:for-each select="."> durchläuft alle Einträge?
Beschäftige Dich mit der Funktionsweise von xsl:template (insbes. mit dem match-Attribut) sowie mit der Arbeitsweise des xsl:apply-templates.
cu,
Andreas