ChrisB: XHTML-Dokument mittels XSLT "erweitern:

Beitrag lesen

Hi,

ich versuche ein XHTML-Dokument mittels XSLT zu "erweitern" - sprich, beim Auftauchen eines bestimmten Elements möchte ich dieses mit einem Container-Element einfassen.

Mein XHTML-Dokument:

<?xml version="1.0" encoding="utf-8"?>  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<title>Titel</title>  
</head>  
<body>  
  <div>  
    <h1>Überschrift</h1>  
    <p>Testabsatz.</p>  
  </div>  
  <p>Text, Text, Text</p>  
</body>  
</html>

In diesem möchte ich jetzt alle P-Elemente mit einem <div class="paragraph">...</div> umschliessen (nur als Beispiel!), d.h. als Ergebnis hätte ich gerne

<?xml version="1.0" encoding="utf-8"?>  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<title>Titel</title>  
</head>  
<body>  
  <div>  
    <h1>Überschrift</h1>  
    <div class="paragraph">  
      <p>Testabsatz.</p>  
    </div>  
  </div>  
  <div class="paragraph">  
    <p>Text, Text, Text</p>  
  </div>  
</body>  
</html>

Mein XSL-Stylesheet:

<?xml version="1.0" encoding="utf-8"?>  
<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="p">  
 <div class="paragraph">  
  <xsl:apply-templates />  
 </div>  
</xsl:template>  
  
<xsl:template match="*">  
  <xsl:copy-of select="." />  
</xsl:template>  
  
</xsl:stylesheet>

(Die Tranformation führe ich momentan mittels PHPs XSLTProcessor->importStyleSheet und ->transformToXML(DOMDocument) durch; Kontrolle dann durch Ausgabe nach Behandlung mit htmlspecialchar.)

Leider erhalte ich nicht das gewünschte Ergebnis.

Lasse ich den letzten Teil im Stylesheet weg, <xsl:template match="*"> - dann bekomme ich nur noch die Textnodes ausgegeben, die Elemente fehlen vollständig.

Kommentiere ich <xsl:template match="p"> aus, erhalte ich keine Veränderung.
Also wird dieses Template gar nicht auf meine P-Elemente angewandt? Wenn nein, warum nicht?
Wird <xsl:template match="*"> auch auf meine P-Elemente angewandt, obwohl es nach meinem Verständnis "allgemeiner" sein sollte, und deshalb zuerst eigentlich <xsl:template match="p"> doch zuerst angewandt werden sollte, wenn es sich beim aktuellen Element um ein P handelt?

Müsste ich hier mit priority bei meinen Templates arbeiten? (So wie ich die Erklärung in SELFHTML verstanden habe, müsste doch match="p" automatisch eine höhere Priorität haben als match="*", oder?)

Wie bekomme ich es hin, dass beim Auftreten eines bestimmten Elements darum herum ein weiteres eingefügt wird, es selber und alle seine Nachfahren jedoch inkl. aller Attribute übernommen werden; und alle nicht betroffenen Elemente ausserhalb ebenfalls?

MfG ChrisB

--
Light travels faster than sound - that's why most people appear bright until you hear them speak.