ritschmanhard: Probleme bei Generierung von XHTML

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

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

    1. Hi Christian!

      :( schade, aber immerhin ne schnelle Antwort und ich hab wieder was dazugelernt.

      Vielen Dank,
      Richard

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