mehrere XML in einer XSL verarbeiten
Kerstin
- xsl
0 Thomas J.S.0 Kerstin
Hallo,
ich habe hier zwei XML-Dateien
"cdcatalog_data.xml" mit den Daten
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
</catalog>
und
"cdcatalog_book.xml" mit der Struktur - also wie am Ende die Daten angeordnet sein sollen
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<cd_liste/>
</table>
</body>
</html>
Dazu gibt es ein cdcatalog.xsl, welches beim Aufruf zusammen mit cdcatalog.xml dieses verarbeitet:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
<xsl:template match="/">
[1]<xsl:copy-of select="."/>
xsl:apply-templates/
</xsl:template>
<xsl:template match="cd_liste">
[2]<xsl:for-each select="document('cdcatalog_data.xml')/catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Bei [1] kopiert er alle vorhandenen Knoten. Die brauch ich auch, denn diese sollen ja erhalten bleiben. Unter [2] sollen nun die Daten aus cdcatalog_data.xml eingefügt werden. Allerdings ersetzten diese nicht das Element <cd_liste/> in cdcatalog_book.xml, sondern werden einfach hinten dran angehangen, so dass so eine Ausgabe zu stande kommt:
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<cd_liste></cd_liste>
</table>
</body>
</html>
My CD Collection
Title
Artist
<tr>
<td>Empire Burlesque</td>
<td>Bob Dylan</td>
</tr><tr>
<td>Hide your heart</td>
<td>Bonnie Tyler</td>
</tr>
Die Frage ist, wie krieg ich die Daten an die richtige Stelle <cd_liste/> und kann die anderen Elemente drumrum mit ihrem Inhalt kopieren?
THX,
Gruß,
Kerstin
Hallo,
Die Frage ist, wie krieg ich die Daten an die richtige Stelle <cd_liste/> und kann die anderen Elemente drumrum mit ihrem Inhalt kopieren?
-------------- XSL --------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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('kerstin2.xml')/catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
------------------------------------------------
(Dateinamen im document() Anpassen)
Angewendet auf "cdcatalog_book.xml" produziert eine Ausgabe:
<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>Empire Burlesque</td>
<td>Bob Dylan</td>
</tr>
<tr>
<td>Hide your heart</td>
<td>Bonnie Tyler</td>
</tr>
</table>
</body>
</html>
Grüße
Thomas
Na das is ja genial ... ich danke Dir
Gruß,
Kerstin