XSL zerstört CSS

Trash

Erfahrenes Mitglied
moin,
ich habe eine XSL-Datei in der dasselbe steht wie in meiner index.html.
Lediglich am Anfang des XSL-Dokuments habe ich anstatt:

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>

nun:
Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">

stehen. Aber der IE (im FF/Safari gehts) stimmt nun das Design (Header stimmt nicht) nicht mehr. Gibt es eine Möglichkeit in der XSL-Datei die XML/XSL-Version so anzugeben, dass die HTML richtig angezeigt wird, wie im ersten Fragment.

Zu sehen: (Richtig im IE und FF -> nur HTML)
http://www.room21.de/dba/test/

XML/XSL (Falsch im IE, Richtig im FF):
http://www.room21.de/dba/test/inc/uebungen/insert_uebung01.xml

kann mir jemand helfen ? bzw. warum ist es überhaupt so, dass der IE durch die Veränderung des Doytypes was anderes anzeigt als der FF ?

Danke !
 
Hi.

Das Problem ist das der IE sich im so gennanten Quirks-Mode befindet. Man kann den Modus in den der Browser schaltet mit dem DOCTYPE beeinflussen. Dazu kannst du z.B. hier http://www.heise.de/ix/artikel/2004/03/136/ und http://www.carsten-protsch.de/zwischennetz/doctype/einleitung.html#doctype-switch etwas nachlesen.

Kontrollieren kann man den aktuellen Modus des Browsers indem man sich mit Javascript die Variable document.compatMode ausgeben läßt.

Um den IE zu überreden in den Standard Modus zu schalten mußt du den XSLT Prozessor veranlassen einen gültigen DOCTYPE auszugeben den der IE kennt (Übersicht: http://msdn.microsoft.com/library/e...ments.asp?frame=false#cssenhancements_topic2). Allerdings hat die Sache auch noch einen Haken: der IE hat viele Bugs und der DOCTYPE muß als allererstes im Dokument stehen - d.h. das man keine Processing Instruction ausgeben darf.

Das Ganze kannst du so erreichen:
XML:
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" 
            doctype-system="http://www.w3.org/TR/html4/loose.dtd" />
Gruß
 
Zuletzt bearbeitet von einem Moderator:
moin,
ich habe jetzt in der .xsl stehen:

Code:
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" 
            doctype-system="http://www.w3.org/TR/html4/loose.dtd" /> 
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
<html>
<head>

da meckert der IE und zeigt mir keine Seite mehr an...xml nicht valid oder so....hab ich dir reihenfolge verkehrt angeordnet ?
 
Trash hat gesagt.:
hab ich dir reihenfolge verkehrt angeordnet ?
Ja. Dein Stylesheet ist nicht wohlgeformt (zumindest das sollte man ja eigentlich immer hinkriegen :rolleyes:) da ein XML Dokument genau einen Wurzelknoten haben muss.

Das xsl:eek:utput Element ist ein Toplevel Element welches unterhalb des xsl:stylesheet stehen darf. Siehe http://www.w3schools.com/xsl/el_output.asp

Und bitte halte dich zur besseren Lesbarkeit mal etwas an die Groß-/Kleinschreibung - siehe Netiquette Nr. 15.

Gruß
 
Trash hat gesagt.:
lso wenn ich deinen Code benutze macht er nicht viel.
Also das ist mal eine gute und aussagekräftige Beschreibung! ;-]

Bei mir funktioniert es. (siehe Anhang)

Allerdings solltest du wenn du wenn du die html Ausgabemethode verwendest kein meta Tag angeben - das macht der xslt Prozessor automatisch.

Gruß
 

Anhänge

  • 24720attachment.png
    24720attachment.png
    46 KB · Aufrufe: 9
Hey,
also im IE 6 sieht es aktuell, just in diesem Moment, so aus wie auf dem Screen. Der Header muss mit dem Puzzleteil passen. Das stimmt nun auch mit meinem Code-Fragment, aber rechts haben wir noch einen Fehler. -> siehe Screen!
 

Anhänge

  • 24721attachment.jpg
    24721attachment.jpg
    63,9 KB · Aufrufe: 6
Zuletzt bearbeitet:
Nochmal: Du mußt einen entsprechenden DOCTYPE ausgeben damit der IE das Dokument im CSS1 Modus interpretiert und so keine Darstellungsfehler auftreten.

Das Problem mit dem fehlenden Puzzleteil liegt tatsächlich am falschen Encoding. Standardmäßig generiert der XSLT Prozessor ein Dokument im UTF-8 Format. Dadurch das nichts anderes angegeben ist liest der Internet Explorer den dba.css Stylesheet auch im UTF-8 Encoding obwohl er wohl eher das CP1252 bzw. latin1 Encoding benutzt.

Warum verschwindet dann die Grafik? Da bin ich neulich schonmal drüber gestolpert. Und zwar führt das ü im Kommentar "linkes passendes Stück" dazu das die komplette nächste Zeile ignoriert wird. Der IE überliest damit die gesamten Angaben für die header_left Klasse. Nimm einfach das ü weg und es funktioniert.

Eigentlich sollte es möglich sein, direkt beim link Element mit dem charset Attribut das Encoding der verlinkten Resource anzugeben. Das unterstützt der IE aber anscheinend nicht. :(

Also entweder du speicherst alle Dokumente gleich in UTF-8 (intern benutzt Windows das sowieso und konvertiert ständig hin und her) oder du gibst eben das encoding Attribut beim xsl:eek:utput Element an.

Gruß

Gruß
 
Zurück