Aufruf von "verschachtelten" Templates und Ausgabe von XHTML
MichaelR
- xsl
0 ThomasM
Hallo zusammen,
habe seit längerem XML/XSL schon nicht mehr so intensiv betrieben und bin daher etwas eingerostet.
Es liegt folgende XML-Datei vor:
<?xml ...>
<doc>
<content>
<h3>Titel</h3>
<p>
Ein <em>wenig</em> Text hier ...
</p>
<p>
<bild... />
Text <strong>text</strong> text
</p>
</content>
</doc>
<?xsl ...>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="content">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="p|strong|em">
<xsl:copy-of select="." /> ???
</xsl:template>
<xsl:template match="bild">
<image ... />
</xsl:template>
Das obige examplarische XML soll in XHTML umgewandelt werden. Für die XML-Nodes, die nicht XHTML sind existieren entsprechende XSL:Templates. Allerdings steh ich grad auf dem Schlauch wie ich den Bild-Knoten in einen richtigen XHTML-Tag umwandle, da er verschachtelt ist???
Wie kann ich im Template für "p/etc" das andere Template für "bild" aufrufen, so dass auch, der p/etc--Tag richtig umgewandelt wird???
Herzlichen Dank!
Grüße
Michael
Hallo Michael,
Wie kann ich im Template für "p/etc" das andere Template für "bild" aufrufen, so dass auch, der p/etc--Tag richtig umgewandelt wird???
Probiere diesen Ansatz:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="doc">
<html>
<head>
<title>Text</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="content">
<body>
<xsl:apply-templates/>
</body>
</xsl:template>
<xsl:template match="p">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="h3|strong|em">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="bild">
<img src="{@quelle}" width="{@breite}" height="{@hoehe}" alt="{@alttext}"/>
</xsl:template>
</xsl:stylesheet>
… mit diesen bild-Elementen:
<bild quelle="abc.jpg" breite="200" hoehe="50" alttext="Text"/>
Statt h3 wäre natürlich der Beginn mit h1 semantischer … ;)
Grüße,
Thomas