MichaelR: Aufruf von "verschachtelten" Templates und Ausgabe von XHTML

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

  1. 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