html output mit xsl

Inspector

Erfahrenes Mitglied
Hi,

ich habe diverse Probleme, per xsl korrektes html zu produzieren. Hier mal die ersten beiden Probleme:
Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0" 
	xmlns		= "http://www.w3.org/1999/html"
	xmlns:h		= "http://www.w3.org/1999/html"
	xmlns:xsl	= "http://www.w3.org/1999/XSL/Transform"
	xmlns:rdf	= "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:rdfs	= "http://www.w3.org/2000/01/rdf-schema#"
	xmlns:rss	= "http://purl.org/rss/1.0/"
	xmlns:cc	= "http://web.resource.org/cc/"
	xmlns:dc	= "http://purl.org/dc/elements/1.0/"
	xmlns:hr	= "http://www.w3.org/2000/08/w3c-synd/#"
	xmlns:date	= "http://exslt.org/dates-and-times"
	xmlns:foaf	= "http://xmlns.com/foaf/0.1/"
	xmlns:svg	= "http://www.w3.org/2000/svg"
	xmlns:inkscape	= "http://www.inkskape.org/namespace/inkscape"
	xmlns:sodipodi	= "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
	xmlns:xlink	= "http://www.w3.org/1999/xlink"
	exclude-result-prefixes="h xsl rdfs rss cc dc hr foaf date svg sodipodi inkscape xlink">
<xsl:output method="html" indent="yes" />
<xsl:output doctype-public="-//W3C//DTD HTML 4.01//EN"/>
<xsl:output doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
<xsl:output encoding="iso-8859-1"/>

Das ist der Anfang des xsl Stylesheets. Die ersten zwei Zeilen des Resultats sehen so aus:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/html" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" lang="de">

Allein in diesen zwei Zeilen sind eine Menge Fehler (sagt der Validator von w3c). Erstens kann kein DOCTYPE gefunden werden! Wenn ich manuell zwischen den PUBLIC und dem SYSTEM identifier ein Leerzeichen einfüge, dann findet der validator den DOCTYPE. Also, wie bekomme ich dieses Leerzeichen per xsl da rein?

Zweitens: html 4 verträgt anscheinend absolut gar keine namespaces. Jeder einzelne wird angemeckert.

Drittes Problem: Ich habe in der Quelldatei links stehen, die einen Apersand enthalten, korrekt encoded natürlich. xalan meckert auch nicht, aber im Resultat steht der nicht-kodierte Ampersand an der Stelle. Der muß aber auch im Resultat kodiert sein.

Hier die Zeite aus der Quelldatei:
Code:
<a href="http://www.dsa-ring.com/go.php?id=501&amp;action=-1">
<button class="prev" type="button"
onclick="self.location.href='http://www.dsa-ring.com/go.php?id=501&amp;action=-1'">
<img src="icons/prev.gif" width="20" height="13" alt="zurück" />
</button>
</a>
Wie man sieht, enthält das hier zweimal einen Ampersand. Und hier das Resultat nach der Anwendung des xsl-stylesheets:
Code:
<a href="http://www.dsa-ring.com/go.php?id=501&action=-1">
<button class="prev" type="button" onclick="self.location.href='http://www.dsa-ring.com/go.php?id=501&amp;action=-1'">
<img src="icons/prev.gif" width="20" height="13" alt="zur&uuml;ck">
</button>
</a>
Hier ist der erste Ampersand (der vom a Element) unkodiert drin, der vom JavaScript ist korrekt. Warum? Wie bekomme ich den anderen ebenfalls korrekt hin?

Das Template, das hier zum Zuge kommen dürfte, ist folgendes:
Code:
<xsl:template match="node()|@*">
	<xsl:copy>
		<xsl:apply-templates select="@*|node()"/>
	</xsl:copy>
</xsl:template>
Ich habe es aber auch schon zusätzlich mit folgendem Template versucht, mit dem gleichen fehlerhaften Resultat:
Code:
<xsl:template match="a">
	<xsl:copy-of select="."/>
</xsl:template>
 

Neue Beiträge

Zurück