Attribute von Elementen ausgeben
adalbert
- xsl
Hallo Zusammen!
Ich möchte gerne Elemnte von Attributen über eine xsl ausgeben:
<traeger_liste>
<traeger V="012345">
<name R="Sechser"/>
</traeger>
</traeger_liste>
Im besten Fall steht in der "Ausgabe"
'012345, Sechser'
Wie würde die entsprechende Anweisung im xsl aussehen?
Viele Grüße
Adalbert
@@adalbert:
nuqneH
Wie würde die entsprechende Anweisung im xsl aussehen?
http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#attribute und http://xml.klute-thiemann.de/index.html#attribute-value-templates sollten dir weiterhelfen.
Qapla'
@@adalbert:
nuqneH
Wie würde die entsprechende Anweisung im xsl aussehen?
http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#attribute und http://xml.klute-thiemann.de/index.html#attribute-value-templates sollten dir weiterhelfen.
Qapla'
Hallo,
danke für die Links! Nach lesen (und verstehen), habe folgendes:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="traeger_liste/traeger/@V">
<tr><td><b><xsl:text>Ausgabe Trägernummer:</xsl:text></b></td>
<td><xsl:value-of select="." /></td></tr>
</xsl:template>
</xsl:stylesheet>
Das funktioniert nur leider nicht :-( Ich habe "Name" zum Test weggelassen...
Viele Grüße
A.
Hallo adalbert,
Das funktioniert nur leider nicht :-( Ich habe "Name" zum Test weggelassen...
Ansatz:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="traeger_liste">
<tr>
<td><b>Ausgabe Trägernummer:</b></td>
<td><xsl:value-of select="concat(traeger/@V, ', ', traeger/name/@R)"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
xsl:text ist zur Textausgabe hier nicht nötig.
Grüße,
Thomas
Hallo Thomas!
Das funktioniert super! ;) Ich bekomme es nur (noch) nicht hin, eine Schleife drum herum zu bauen, die alle "Träger" ausgibt...
Viele Grüße
Adalbert
Hallo,
Das funktioniert super! ;) Ich bekomme es nur (noch) nicht hin, eine Schleife drum herum zu bauen, die alle "Träger" ausgibt...
Dazu ist http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#for_each@title=for-each zu empfehlen.
Grüße
Siri
Hallo Siri,
Dazu ist http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#for_each@title=for-each zu empfehlen.
xsl:for-each ist vor allem Anfängern nicht als Standardlösung zu empfehlen. Es lohnt sich meistens, Templates zunächst einzeln aufzubauen und mittels xsl:apply-templates aufzurufen (funktionaler Ansatz). Im konkreten Beispiel etwa so:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="traeger_liste">
<table>
<!-- thead ... -->
<tbody>
<xsl:apply-templates select="traeger"/>
</tbody>
</table>
</xsl:template>
<xsl:template match="traeger">
<tr>
<td><b>Ausgabe Trägernummer:</b></td>
<td><xsl:value-of select="concat(@V, ', ', name/@R)"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
Siehe auch Vortragsmaterial (Push vs. Pull, speziell Folien 6/18/19).
Grüße,
Thomas
Hallo,
xsl:for-each ist vor allem Anfängern nicht als Standardlösung zu empfehlen. Es lohnt sich meistens, Templates zunächst einzeln aufzubauen und mittels xsl:apply-templates aufzurufen (funktionaler Ansatz).
Siehst du das eher didaktisch oder technisch?
Grüße
Siri
Hallo Siri,
Siehst du das eher didaktisch oder technisch?
Sowohl als auch.
Ich sehe oft in Büchern oder Tutorials die schnelle Hinwendung zu xsl:for-each, ohne dass zuvor sinnvoll auf den Template-Mechanismus eingegangen wird und in diesem Sinne war mein Hinweis gedacht.
Bei flachen, listenartigen Strukturen (Element b n-fach unterhalb von Element a) oder Abzähloperationen, z. B.
<xsl:for-each select="1 to 5"><img src="symbol.png" alt="…" /></xsl:for-each>
(to-Operator aus XPath 2.0), setze ich auch gern auf xsl:for-each.
Hat man es mit komplexeren Strukturen zu tun, ist xsl:for-each oft nachteilig hinsichtlich Wartbarkeit und Verständnis.
Grüße,
Thomas