Probleme bei Generierung von XHTML
ritschmanhard
- xsl
Hallo!
Ich habe ein Problem, das mit Validität zu tun hat; dabei will ich einfach nur aus xml mittels xsl gültiges xhtml (hier auch html strict mit aufgeführt für unten folgenden Test) erzeugen und darin auch noch javascript verwenden.
****************************************************
Sei XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="./xhtml.xsl"?>
<document>
</document>
****************************************************
Sei (xhtml.xsl) XSL:
::::::::::::hier header für xhtml generierung (A):::::::::::::::
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output
method="xml"
encoding="iso-8859-1"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes" />
:::::hier alternativ header für strict html generierung (B)::::
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output
method="html"
encoding="iso-8859-1"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
indent="yes" />
:::::::::::tepmplate definition für beide gleich::::::::::::
<xsl:template match="/">
<html>
<head>
<title>test</title>
<script type="text/javascript">
function someTest()
{
alert(document.getElementsByName("test").length);
}
</script>
</head>
<body onload="someTest()">
<p>text</p>
<input name="test" type="button" value="OK"></input>
<p>text</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Und jetzt kommt's: während ich bei Variante (B) einen alert vom FF erhalte, steht in Variante (A) nur in der Fehlerkonsole:
document.getElementsByName is not a function
Ich will aber xhtml erzeugen, kein html ...
Was mach ich falsch?
Grüsse,
Richard
Hallo Richard,
Was mach ich falsch?
Du nutzt method="xml" - dann interpretiert der Firefox das generierte Resultat als XML und getElementsByName steht nicht zur Verfügung (weil das HTML-DOM ist und in XML-DOM nicht zur Verfügung steht). Format korrekt wäre method="xhtml" - allerdings bezweifle ich, dass der Firefox das kann, das ist nämlich XSLT 2.0 - und Saxon ist der einzige OpenSource-XSLT-Prozessor, der mir bekannt ist und das kann (und der ist in Java und/oder .NET).
XHTML mit XSLT erzeugen ist also im Moment nicht wirklich gut möglich - zumindest nicht im Browser. Nutze HTML als Ausgabe, Dir bleibt wohl nichts anderes übrig.
Viele Grüße,
Christian
Hi Christian!
:( schade, aber immerhin ne schnelle Antwort und ich hab wieder was dazugelernt.
Vielen Dank,
Richard
Hallo ritschmanhard,
<xsl:output
method="xml"
encoding="iso-8859-1"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes" />
Ohne viel Hoffnung auf Erfolg: Füge mal noch hinzu (version bezieht sich auf die XHTML-Version):
version="1.0" media-type="text/html"
und evtl. noch omit-xml-declaration="yes"
Grüße,
Thomas