hi otis
versuch mal in deinem stylesheet folgenden header:
<?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="xml" encoding="ISO-8859-1" media-type="text/xhtml" />
method gibt die methode der tranformation an. und da du aus 2x xml html machen willst ist die methode xml. den typ des ausgabeformates stellst du mit media-type ein. sollte allenfalls auch "text/html" sein falls du nicht xhtml konformen markup schreibst.
grundsätzlich sollten alle xml und xsl elemente (nodes) klein geschrieben werden. wie auch die attribute derselben (auch html-element namen und attribute). dazu sind bei attributen quotes ("") pflicht.
die ganzen ö ü ä und co brauchst du im xml nicht zu codieren wenn du encoding auf ISO-8859-1 einstellst. bin mir nicht sicher aber es könnte sonst sogar zu problemen führen. im xsl solltest du definitiv keine entities für sonderzeichen benutzen, es sei denn du definierst deine eigenen in einer DTD.
der XSLT prozessor übersetzt dann bei der transformation deine sonderzeichen in die entsprechenden entities.
der grund warum dein beispiel nicht überall läuft ist dass der browser einen XSLT prozessor haben muss (hat ausser bei IE (da isses ein kombiding) nichts mit einem XML-Parser zu tun).
so einer ist drin in:
- mozilla 1.2.1 +
- netscape 7.x +
- IE 6.x + (im IE grundsätzlich ab v5 möglich. dazu muss aber noch der MSXML-parser installiert werden. gibts bei MS, ca 600kb download)
- ab winXP ist der parser dann schon drin, ein IE5+ auf XP sollte also eingentlich auch funzen.
script tags im stylesheet solltest du wie folgt definieren:
<script type="text/javascript">
<xsl:comment>
CSInit[CSInit.length] = new Array(CSNSFix);
CSAct[/*CMP*/ 'B7CD142121'] = new Array(CSSetStatus,'Nachricht mitteilen');
//</xsl:comment>
</script>
also <xsl:comment> statt <!-- da sonst das <!-- allenfalls in <!-- und --> in --> übersetzt wird und es einen script-syntax-error geben kann.
evt. nützt es was wenn du zudem im xml file folgenden header verwendest:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
das standalone="no" sagt dem browser dass da ausser dem xml file noch was anderes dazu gehört. sollte aber auch ohne gehen.
betreff browser: (meine ganz persönliche meinung)
IE 4 und NS 4 kannst du getrost vergessen. ein blick in die logfiles der webserver die ich betreue zeigt in etwa folgendes bild:
- +95% IE6
- ein paar wenige IE5.5
- der rest GECKO kompatible
- NS4 & IE4 tauchen in der statistik nicht mal mehr auf
muss dazu aber noch sagen dass es alles eher technische websites sind die ich hoste welche kaum von 0815 usern besucht werden. wenn du so wie ich den alten schrott endlich hinter dir lassen willst solltest du denselben aber mittels browserabfrage abfangen und download-links zu neuen version anbieten.
idealerweise machst du auf der index seite der website mit js eine kleine abfrage welche umgebung der user hat. dann kannst du in nachher entweder auf die xml version schicken, oder alternativ eine text-only version anbieten (server-seitig gerendert mit anderem stylesheet), oder wie SabineP vorgeschlagen hat eine server-seitig-transformierende version.
eine weitere alternative wäre flashMX, das kann nämlich auch wunderbar xml verarbeiten. so können die fossilienfreunde die inhalte mittels flashplugin anschauen.
das einzige was heutzutage noch für NS4.x sprechen würde ist dass er bei den meissten linux distributionen default mässig installiert wird. ein linux user weiss sich aber sicher zu helfen und wird sich wohl sofort nach der installation den mozilla runterziehen.
es macht durchaus sinn dem computer des users das rendern zu überlassen. du sparst dadurch wertvolle und teure server-ressourcen. zudem sind die clients heutzutage enorm leistungstark und werden einzig durch veraltete browser und technologien zu primitiven terminals degradiert.
hope this helps
s'grüssle aus zürich
Steven
ps: wenn du mit xml in html einbinden xml-data-islands meinst, das ist migrosoft eigenbrödel und funzt nur mit neueren IE's.