Hallo Thomas,
mit <xsl:import href=".." /> klappts ganz gut. Mit <xsl:include .../> gar nicht. Aber das xsl:apply-imports/ an der richtigen Stelle bringt schon einige Resultat :-) Vielen Dank. Allerdings werden die gewünschten Tags im 2. XSL nicht ersetzt ...
1. XSL: cdcatalog.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="cdcatalog_liste.xsl"/> [1]
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*[name() != 'cd_liste']">
xsl:copy
<xsl:for-each select="@*">
<xsl:copy />
</xsl:for-each>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="cd_liste">
<xsl:for-each select="document('cdcatalog.xml')/catalog/cd">
<xsl:variable name="title">[2]
<xsl:value-of select="title"/>
</xsl:variable>
<xsl:variable name="artist">
<xsl:value-of select="artist"/>
</xsl:variable>
<xsl:for-each select="document('cdcatalog_liste.xml')">[3]
xsl:apply-imports/[4]
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Bei [1] wird das 2. XSL importiert. Bei [2] hole ich mir aus der XML-Datei mit den Daten 'cdcatalog.xml' die gewünschten Daten und "speichere" diese jeweils in eine Variable. Außerdem soll ja für jede vorkommende CD eine Zeile in der Tabelle erstellt werden. Die Struktur der Tabelle liegt in cdcatalog_liste.xml ([3]). Mit xsl:apply-imports/ bei [4] wird nun auch das 2. XSL aufgerufen:
2. XSL: cdcatalog_liste.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*[name() != 'title' and name() != 'artist']">
xsl:copy
<xsl:for-each select="@*">
<xsl:copy />
</xsl:for-each>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="title">
<xsl:value-of select="$title"/>
</xsl:template>
<xsl:template match="artist">
<xsl:value-of select="$artist"/>
</xsl:template>
</xsl:stylesheet>
Allerdings wird alles kopiert, auch <title> und <artist> und nicht durch die Variabelen ersetzt. So, dass mein HTML-Output so aussieht:
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<tr>
<td><title></title></td>
<td><artist></artist></td>
</tr>
<tr>
<td><title></title></td>
<td><artist></artist></td>
</tr>
<tr>
<td><title></title></td>
<td><artist></artist></td>
</tr>
</table>
</body>
</html>
Das heißt für mich, ich bin auf dem richtigen Weg. Nur die Ersetzung geht nicht richtig ... Jemand einen Tipp für mich?
Gruß,
Kerstin