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.