XML > XHTML1.1: Falsche(?) Interpretation in FF/Opera
BearT
- xsl
Hi,
ich experimentier gerade etwas mit der XML Darstellung von Subversion Repositories im Apache. Dabei funktioniert die (triviale) Transformation meiner Meinung nach wunderbar, nur die Darstellung im Browser (FF/Opera) funktioniert nicht wie erwartet. Im IE (6 & 7) funktioniert alles wie erwartet.
Wenn ich im FF die fertig transformierte Page speicher, und dann die gespeicherte *.xhtm aufmach, dann funktioniert die Darstellung korrekt.
Ich nehm an ich hab einen Fehler, den der IE einfach ignoriert, hab allerdings nichts in diese Richtung bis jetzt gefunden.
Vielleicht kann mir jemand hier helfen.
XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/subversionStyle.xsl"?>
<!DOCTYPE svn [
<!ELEMENT svn (index)>
<!ATTLIST svn version CDATA #REQUIRED
href CDATA #REQUIRED>
<!ELEMENT index (updir?, (file | dir)*)>
<!ATTLIST index name CDATA #IMPLIED
path CDATA #IMPLIED
rev CDATA #IMPLIED>
<!ELEMENT updir EMPTY>
<!ELEMENT file EMPTY>
<!ATTLIST file name CDATA #REQUIRED
href CDATA #REQUIRED>
<!ELEMENT dir EMPTY>
<!ATTLIST dir name CDATA #REQUIRED
href CDATA #REQUIRED>
]>
<svn version="1.4.3 (r23084)"
href="http://subversion.tigris.org/">
<index rev="1" path="/">
<dir name="Setup" href="Setup/" />
</index>
</svn>
XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml"
encoding = "UTF-8"
doctype-public = "-//W3C//DTD XHTML 1.1//EN"
doctype-system = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
media-type = "application/xhtml+xml"
omit-xml-declaration = "no"
version = "1.0"
standalone = "no"
/>
<xsl:template match="/svn/index">
<html>
<head>
<title>Revision <xsl:value-of select="@rev" /></title>
</head>
<body>
<p>powered by Subversion <xsl:value-of select="../@version" /></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Gespeicherte XHTML Datei:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html><head><title>
Revision 1</title></head><body><p>powered by Subversion 1.4.3 (r23084)</p></body></html>
Auffällig ist, dass <?xml ... ?> fehlt, obwohl es angegeben wäre. Der Mime Type application/xhtml+xml wird korrekt verwendet.
Die Darstellung in FF und Opera sieht identisch aus und zwar wie folgt:
* es wurde kein <title> gesetzt
* der Titel (Revision 1) steht direkt im Browserfenster als Text
* danach steht "powered by ...."
Es werden also alle Textnodes angezeigt, und alle anderen Nodes gestrichen.
Ich vermute ganz stark, dass ich hier irgendwas komplett falsch verstanden habe, allerdings hab ich keine Idee was. Ich bin also für jede Hilfe dankbar.
lg,
Norbert
Hallo BearT,
Ich vermute ganz stark, dass ich hier irgendwas komplett falsch verstanden habe, allerdings hab ich keine Idee was. Ich bin also für jede Hilfe dankbar.
Ich habe ehrlich gesagt keine Ahnung, würde aber mal vermuten, dass der Firefox/Opera nicht richtig mitkriegt, dass es sich um ein XHTML-Dokument handelt.
Würde es vielleicht helfen dem HTML-Element den XHTML-xmlns zuzuweisen?
Jonathan
Würde es vielleicht helfen dem HTML-Element den XHTML-xmlns zuzuweisen?
Natürlich würde es das. Wie du richtig bemerkt hast, hab ich nur den Namespace für xsl angegeben, d.h. es fehlt der XHTML Namespace.
Die einzig notwendige Änderung im XSL sieht nun so aus:
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
So funktionierts dann auch im FF und im Opera (der allerdings als Title nur "Revision" statt "Revision 1" anzeigt, aber das ist ein anderes Problem).
Zu blöd von mir nicht ordentlich auf die Namespaces zu achten.
Danke für deine schnelle Hilfe.
Norbert