Zwei Templates für ein Element
Torben Hildmann
- xsl
Liebe SELF-Gemeinde,
ich beschäftige mich erst seit kurzem mit XSL und komme bei folgender Aufgabenstellung nicht weiter.
Ich habe es mal wie folgt auf das wesentliche reduziert.
Eine XML-Datei Bsp.1 soll nach Bsp.2 transformiert werden.
Dafür gibt es für jedes Element ein eigenes Template (Bsp.3)
Soweit ist mir alles klar.
Jetzt möchte ich aber ein Ergebnis wie in Bsp. 4 haben.
Also ein allgemeineres Element "xyz" welches die spezielleren Elemente "a", "b" und "c" umfasst.
Wie löst man das am elegantesten?
Bisher habe ich nur die Lösung die Tags für "xyz" in jedem Template für a,b und c zu ergänzen.
Also dreifach und das gefällt mir so nicht.
Bei der Lösung die mir vorschwebt würde ich ein weiteres Template für "xyz" haben das auf "a", "b" und "c" passt und jeweils
eines für "a", "b" und "c".
Bisher habe ich es aber nicht hinbekommen.
Die grundlegenden XSL-Bausteine sind mir bekannt, was mir hier fehlt ist die Lösungsidee.
Vielleicht kann mich hier jemand kurz in den Gartenzaun schubsen oder den Pfahl in die richtige Richtung winken.
Gruß
Torben
Bsp. 1)
<example>
<a>A</a>
<b>B</b>
<c>C</c>
</example>
Bsp. 2)
<example>
<a1>A</a1>
<b1>B</b1>
<c1>C</c1>
</example>
Bsp. 3)
<xsl:template match="a"><xsl:element name="a1"><xsl:value-of select="." /></xsl:element></xsl:template>
<xsl:template match="b"><xsl:element name="b1"><xsl:value-of select="." /></xsl:element></xsl:template>
<xsl:template match="c"><xsl:element name="c1"><xsl:value-of select="." /></xsl:element></xsl:template>
Bsp. 4)
<example>
<xyz><a1>A</a1></xyz>
<xyz><b1>B</b1></xyz>
<xyz><c1>C</c1></xyz>
</example>
Hallo,
ich beschäftige mich erst seit kurzem mit XSL und komme bei folgender Aufgabenstellung nicht weiter.
Ich habe es mal wie folgt auf das wesentliche reduziert.Eine XML-Datei Bsp.1 soll nach Bsp.2 transformiert werden.
Dafür gibt es für jedes Element ein eigenes Template (Bsp.3)
Soweit ist mir alles klar.
Jetzt möchte ich aber ein Ergebnis wie in Bsp. 4 haben.
Also ein allgemeineres Element "xyz" welches die spezielleren Elemente "a", "b" und "c" umfasst.
Wie löst man das am elegantesten?
Bisher habe ich nur die Lösung die Tags für "xyz" in jedem Template für a,b und c zu ergänzen.
Also dreifach und das gefällt mir so nicht.Bei der Lösung die mir vorschwebt würde ich ein weiteres Template für "xyz" haben das auf "a", "b" und "c" passt und jeweils
eines für "a", "b" und "c".
Bisher habe ich es aber nicht hinbekommen.
Die grundlegenden XSL-Bausteine sind mir bekannt, was mir hier fehlt ist die Lösungsidee.
<xsl:template match="example">
<example>
<xsl:for-each select="*">
<xyz>
<xsl:apply-templates />
</xyz>
</xsl:for-each>
</example>
</xsl:template>
<xsl:template match="a"> ...
<xsl:template match="b"> ...
etc.
Grüße
Thomas
Hi Thomas,
Danke das hilft mir weiter.
Jetzt sieht mein XSL schon deutlich übersichtlicher aus.
Gruß Torben