XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   (X)HTML (http://xhtmlforum.de/forumdisplay.php?f=72)
-   -   xhtml mit xsl? (http://xhtmlforum.de/showthread.php?t=59330)

.rhavin 28.11.2009 20:35

xhtml mit xsl?
 
Hallo Leute, ich habe folgendes Problem:

Ich möchte in einem Dokument beim Laden ein javascript ausführen, also brauche ich den Onload-Event-Handler im Body - soweit erstmal alles easy.

Nun ist ja XHTML eine XML-Untermenge, auch wenn ich nicht den Eindruck habe, daß die für mich wichtigen Browser FF und IE das genauso sehen, denn ich benöte außerdem, daß auf den Content noch ein XSL-Stylesheet angewendet wird, und genau da geht das Problem los - die übliche Link-Anweisung wird zwar gewertet, wenn es sich um eine *.xml-Datei handelt, aber falls es sich um eine *.html-Datei handelt, wir sie schlicht und einfach ignoriert!

Mache ich allerdings ein XML-Dokument daraus, wird das XSL-Stylesheet gewertet, aber nicht der Onload-Handler, was a bissel dämlitsch is...

Was mach ich'n da?

.rhavin 29.11.2009 01:06

$#*!%&! :roll:

Also ich glaub', ich bin 3 Jahre zu früh ;-/

Anstatt den Content einfach mal so zu interpretieren wie's da steht, versuchen die blöden Browser mitzudenken...

Habe ich eine *.html-Datei, denken die sich offensichtlich bei allen <? .... ?> - Tags: "Oh, 'son neumodischer XML-Schnickschnack .. is bestimmt nur informativ, laß' ich mal besser weg."

Habe ich eine *.xml-Datei, sehen die beiden Spacken die für mich wichtige DOCTYPE für XHTML1.1 und denken sich "Oh, das is ja garkein HTML-Dokument, na, da sonder ich mal sicherheitshalber 'ne Fehlermeldung ab."

http://freesmileys.smiliesuche.de/ko...d/banghead.gif

.rhavin 29.11.2009 03:55

*loooooooooooooooool*

Ick gloobs nich....

Also, ich habs tatsächlich geschafft! Da es zuerst *nicht* ging, und mir der IE wenigstens immer genau anzeigt, wo der Fehler liegt, hatte ich zuerst mal mit den IE weiterprobiert, so frei nach dem Motto: Wenn die Zicke das hinbekommt, dann schafft es der FF ja wohl auch.
Nun hatte ich dabei die Rechnung ohne das w3c gemacht: denen hat das falsche Verhalten des IE (ständig die DTD nachzuladen, statt bei PUBLIC erstmal die lokale Kopie zunutzen) nämlich (endlich!) mal gereicht.

Da der Traffic auf den w3-Servern exorbitant anstieg, seit immer mehr Designer !DOCTYPEs benutzen und daher die IEs bei JEDER SEITE ne DTD vom w3c runterzuladen versuchten (man glaubt's ja nich, wenn man es nicht selber gesehn hat;)), hat das w3c die Notbremse gezogen und schlicht folgende policy gesetzt:

Kommt ein IE und will 'ne DTD runterladen, dann schmeiß ihn mit ner 503 raus.

Geil, oder? Dadurch brach dann immer mein Dokument im *.xml-Modus ab.

Dafür war der Fehler im FF ganz wo anders zu suchen, der hat nämlich einen mach-dem-DAU-das-Internet-easy-by-default-Modus, in dem LOKALE XLS's nicht ausgeführt werden. Einzustellen unter about:config -> security.fileuri.strict_origin_policy, wenn man es denn mal weiß, denn irgendeine entsprechende Warnung spuckt das Teil natürlich nicht aus;-/

Ein weiter nur-FF Bug: Kommt in einem CSS ein unbekannter Selector, also z.B. ...

HTML-Code:

dubidu {display:block;}
... verschluckt der sich irgendwie; daher sollten zuesrt alle Standard-xhtml-Tags frisiert werden und danach erst die eigenen.

Nun also die Lösung:
  • die DTD muß per Browserweiche raus, also im IE ohne DTD.
  • das body-tag muß per xsl:template nochmal neu definiert werden, da kann man dann auch den onload-handler benutzen.
  • das css-stylesheet muß gleich zweimal eingebunden werden (dafür muß das Head-Tag auch neu definiert werden), und war am besten so:

Die als *.xml gespeichte xhtml-Datei:
HTML-Code:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" ?>
<!-- note: title as attribute of head-->
<html><head title="test-xml">
        <!--  ... -->
</head><body>
        <!--  ... -->
</body></html>

das XSL-Stylesheet (Auszug):
HTML-Code:

<!-- stylesheet name und pfad als variable. Note inner quotes! -->
<xsl:variable name="stylesheet" select="'stylesheet.css'" />

<xsl:template match="/">
        <xsl:processing-instruction name="xml-stylesheet">
                <xsl:attribute name="href"><xsl:value-of select="$stylesheet" /></xsl:attribute>
                <xsl:attribute name="type">text/css</xsl:attribute>
        </xsl:processing-instruction>
        <html>
                <xsl:apply-templates />
        </html>
</xsl:template>

<xsl:template match="head">
        <head>
                <!-- insert title from heads title attribute -->
                <title><xsl:value-of select="@title"/></title>
                <link rel="stylesheet" type="text/css">
                        <xsl:attribute name="href"><xsl:value-of select="$stylesheet" /></xsl:attribute>
                </link>
                <xsl:apply-templates />
        </head>
</xsl:template>

<xsl:template match="body">
        <body onload="alert('onload handler executed!');">
                <xsl:apply-templates />
        </body>
</xsl:template>

;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:41 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023