alphabetische Ausgabe
josef stebegg
- xsl
Hallo,
Die elegante Möglichkeit der alphabetischen Ausgabe
...
<xsl:for-each select="gat"><xsl:sort select="." data-type="text"/><div class="gat"><xsl:value-of select="child::text()"/>
<xsl:for-each select="art">..usw.
</div></xsl:for-each>
</div></xsl:for-each>
...
bringt mich jetzt in andere Schwierigkeiten.
...
<gat>Dahlien
<art>Die Dahlie</art>
</gat>
<gat>Astern
<art>Die Strandaster</art>
<art>Die Herbstaster</art>
</gat>
...
Was mache ich den bitte wenn ich z.B. Astern (im Gegensatz zu Dahlien) mit einer anderen Farbe oder Hintergrund ausgeben will. <gat1> und <gat2> kann ich ja nicht mehr schreiben. Vielleicht mit Attributen, aber wie?
schöne Grüße
Josef
Hallo,
bringt mich jetzt in andere Schwierigkeiten.
...
<gat>Dahlien
<art>Die Dahlie</art>
</gat>
<gat>Astern
<art>Die Strandaster</art>
<art>Die Herbstaster</art>
</gat>
...Was mache ich den bitte wenn ich z.B. Astern (im Gegensatz zu Dahlien) mit einer anderen Farbe oder Hintergrund ausgeben will. <gat1> und <gat2> kann ich ja nicht mehr schreiben. Vielleicht mit Attributen, aber wie?
Geht es um die HTML-Ausgabe oder um relevaten Informationen, die sich auf die Informationen im XML beziehen (<g>Astern</g>, <g>Rote Astern</g>)?
Wenn's nur um HTML geht:
<xsl:for-each select="gat">
<xsl:sort select="." /> (data-type="text" ist default, muss du nicht extrea angeben)
<div>
<xsl:attribute name="class">
xsl:choose
<xsl:when test="position() mod 2 = 0">rot</xsl:when>
xsl:otherwiseblau</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="child::text()"/>
...
damit stellst du die divs abwechselnd einmal mit der und einmal mit der Klasse dar.
WEnn du gnz eigene Farben haben willst: dann entweder über ein Attribut im XML, oder du fragst den TExt m XML ab:
xsl:attribute name="class">
xsl:choose
<xsl:when test="child::text() = 'dies'">klasse1</xsl:when>
<xsl:when test="child::text() = 'das'">klasse2</xsl:when>
...
xsl:otherwisedefaultklasse</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
Grüße
Thomas
Danke für die Antwort.
Wenn ich (eher) die zweite Version richtig verstanden habe müßte die Anweisung konkret wie folgt lauten:
<xsl:for-each select="gat"><xsl:sort select="." /><div>
<xsl:attribute name="class">
xsl:choose
<xsl:when test="child::text() = 'Astern'">gtt</xsl:when>
xsl:otherwisegat</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="child::text()"/>
wobei gat und gtt zwei klassen in der css Datei sind.
Die "Astern" werden aber auch mit der (Farbe der) Klasse gat angezeigt !?
schöne Grüße
josef
Hallo,
Wenn ich (eher) die zweite Version richtig verstanden habe müßte die Anweisung konkret wie folgt lauten:
<xsl:for-each select="gat"><xsl:sort select="." /><div>
<xsl:attribute name="class">
xsl:choose
<xsl:when test="child::text() = 'Astern'">gtt</xsl:when>
xsl:otherwisegat</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="child::text()"/>wobei gat und gtt zwei klassen in der css Datei sind.
Die "Astern" werden aber auch mit der (Farbe der) Klasse gat angezeigt !?
Die "Astern" haben die Klasse "gtt" und die Eigenschaften die du in der Klasse definiert: <div class="gtt">Atern ... <div>.
Wenn du auch die Eigenschaften der Klasse "gat" haben willst:
<xsl:when test="child::text() = 'Astern'">gat gtt</xsl:when>
Denke hierbei ganz normal im CSS und deren Regel für Klassen und Vererbungen.
Grüße
Thomas
Danke Andreas und Thomas,
jetzt stimmt alles.
schöne Grüße
Josef
Hi,
<xsl:when test="child::text() = 'Astern'">gtt</xsl:when>
Die "Astern" werden aber auch mit der (Farbe der) Klasse gat angezeigt !?
<gat>Astern
<art>Die Strandaster</art>
<art>Die Herbstaster</art>
</gat>
in child::text() dürften in diesem Fall auch Zeilenumbruch und Einrückung von "art" enthalten sein. child::text() ist also
'Astern
'
(ggf. auch noch mehr, aber soweit ich weiß, llefert child::text() nur den Inhalt des ersten Kind-Textknotens).
'Astern
' ist aber nicht gleich 'Astern', so daß der otherwise-Fall zuschlägt.
Ich halte es generell für ungünstig, Text und Kindelemente auf einer Ebene zu haben (u.a. auch wegen der Whitespaces.
Ich würde eher zu so einem XML tendieren:
<gat>
<name>Astern</name>
<art>Die Strandaster</art>
<art>Die Herbstaster</art>
</gat>
oder
<gat name='Astern'>
<art>Die Strandaster</art>
<art>Die Herbstaster</art>
</gat>
cu,
Andreas