Dateninseln in IE 5 - ja oder nein?
Utz Grimminger
- xml
Hi zusammen!
Aus vergangenen Threads hörte ich unterschiedliche Meinungen dazu, ob der IE 5.0 jetzt Dateninseln (XML in HTML) darstellen kann oder nicht.
Ich hab gerade versch. Beispiele abgetippt (aus den MSDN Online Libraries und aus dem XML-Einsteigerseminar von Seeboerger-Weichselbaum {soll ja Fehler haben, ich weiß}), nix davon führt zu Anzeigen oder wenigstens Fehlermeldungen, wird also völlig ignoriert.
Geht das denn nur in bestimmten Subversionen? Oder wie? Oder mache ich gar was falsch? Hier meine Codes:
Die HTML-Datei:
<HTML>
<HEAD>
<TITLE>Dateninsel-Test</TITLE>
</HEAD>
<BODY>
<H1>Das ist ein Dateninsel-Test!</H1>
<XML ID="test" SRC="test.xml">
</XML>
<H2>Und jetzt?</H2>
</BODY>
</HTML>
Die XML-Datei:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="test.xsl" type="text/xsl" ?>
<root xmlns:html="http://www.w3.org/TR/REC-html40">
<eltern>
<kind>
<name xml:link="simple" href="http://www.irgendwas.de/">irgendwas</name>
<bild quelle="irgendwas.gif" />
<kinder>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
</kinder>
</kind>
<kind>
<name xml:link="simple" href="http://www.irgendwas.de/">irgendwas</name>
<bild quelle="irgendwas.gif" />
<kinder>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
<kindeskind><kindname>irgendwas</kindname></kindeskind>
</kinder>
</kind>
<kind>
<name xml:link="simple" href="http://www.irgendwas.de/">irgendwas</name>
<bild quelle="irgendwas.gif" />
</kind>
<kind>
<name xml:link="simple" href="http://www.irgendwas.de/">irgendwas</name>
<bild quelle="irgendwas.gif" />
</kind>
</eltern>
</root>
Die XSL(-T)-Datei:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
xsl:template
<xsl:for-each select="root/eltern">
<xsl:for-each select="kind">
<DIV STYLE="font-family:arial;background:#FFFFFF;">
<A>
<xsl:attribute name="href">
<xsl:value-of select="bild/@href" />
</xsl:attribute>
<IMG BORDER="0" STYLE="vertical-align:bottom;">
<xsl:attribute name="src">
<xsl:value-of select="bild/@quelle" />
</xsl:attribute>
</IMG>
</A>
<A STYLE="background:#FFFFFF;">
<xsl:attribute name="href">
<xsl:value-of select="name/@href" />
</xsl:attribute>
<xsl:value-of select="name" />
</A>
</DIV>
<xsl:for-each select="kinder">
<xsl:for-each select="kindeskind">
<DIV STYLE="margin-left:30px; font-family:arial;display:block;">
<xsl:value-of select="kindname" />
</DIV>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Danke für jede Hilfe!
Grüße
Utz
Hi !
Ich hatte das gleiche Problem. Meine Lösung sieht jetzt so aus:
Hier unten ist eine HTML-Datei. Unten mußt Du den Dateiname 'daten4.xsl'. Durch den Namen Deiner XSL-Datei ersetzten.
Wenn man nun das HTML Dokument öffnet kommt ein Dialogfeld. Hier gibst Du den Namen der XML-Datei ein. Drückst Du jetzt auf den Knopf
wird das XML-Dokument mit Hilfe der XSLT Datei umgesetzt. Dies geschieht mit JScript. Das JScript macht nichts anderes als die XML-Datei und die XSL-Datei zu laden und umzusetzten. Bei einem Fehelr wird eine detaillierte Fehlermeldung ausgegeben, was falsch ist
(Ich hab das Beispiel von der Microsoft Homepage geklaut).
Die untere Datei mußt Du als reportErrors.js abspeichern (also die wo
ganz unten steht !!)
Hoffe das es funktioniert......(hoffentlich werden die Tags jetzt nicht interpretiert.....)
Andreas
<!--
<HTML>
<HEAD>
<TITLE>Anzeige</TITLE>
<SCRIPT src="reportErrors.js"></SCRIPT>
<SCRIPT Language="JScript">
<!--
function DokuLaden(sheetdatei)
{
var source;
var sheet;
var sheetdatei;
var sourcedatei;
source = new ActiveXObject("Microsoft.XMLDOM");
sheet = new ActiveXObject("Microsoft.XMLDOM");
source.async=false;
sheet.async=false;
sourcedatei=quell_xml.value;
sheetdatei=sheetdatei;
source.load(sourcedatei);
sheet.load(sheetdatei);
if (source.parseError.errorCode != 0)
{
result = reportParseError(source.parseError);
}
else
{
if (sheet.parseError.errorCode != 0)
{
result = reportParseError(sheet.parseError);
}
else
{
try {
result = source.transformNode(sheet.documentElement);
}
catch (exception) {
result = reportRuntimeError(exception);
}
}
}
// insert the results into the page
showResult.innerHTML = result;
}
function Loeschen()
{
result="";
showResult.innerHTML=result;
}
-->
</SCRIPT>
</HEAD>
<BODY>
<TABLE>
<TR>
<TD>XML-Datei:</TD>
<TD><input id="quell_xml" name="source" value="Kurs.xml"/></TD>
</TR><TR>
<TD><input type=button value="umsetzten" onClick="DokuLaden('daten4.xsl')"/></TD>
<TD><input type=button value="Loeschen" onClick="Loeschen()"/></TD>
</TR>
</TABLE>
<DIV id="showResult"></DIV>
</BODY>
</HTML>
-------------------------------------------------
// Parse error formatting function
function reportParseError(error)
{
var s = "";
for (var i=1; i<error.linepos; i++) {
s += " ";
}
r = "<font face=Verdana size=2><font size=4>XML Error loading '" +
error.url + "'</font>" +
"<P><B>" + error.reason +
"</B></P></font>";
if (error.line > 0)
r += "<font size=3><XMP>" +
"at line " + error.line + ", character " + error.linepos +
"\n" + error.srcText +
"\n" + s + "^" +
"</XMP></font>";
return r;
}
// Runtime error formatting function
function reportRuntimeError(exception)
{
return "<font face=Verdana size=2><font size=4>XSL Runtime Error</font>" +
"<P><B>" + exception.description + "</B></P></font>";
}
----------------------------------------------------
-->
Hi Andreas,
erst mal vielen Dank fürs Script - klappt "natürlich" erst mal nicht, spuckt aber immerhin recht lehrreiche Fehlermeldungen aus, in meinem Fall:
XML Error loading 'file://C:\xml\test.xml'
Der Name für das oberste Element muss zu dem Namen der DOCTYPE-Deklaration passen.
at line 7, character 52
<root xmlns:html="http://www.w3.org/TR/REC-html40">
Sagt mir zwar jetzt erst mal wenig, aber ich bastel da mal dran rum, möglicherweise geht der "offizielle" Weg ja auch, wenn ich das mit Hilfe des reportErrors debugged habe?
Danke nochmal und Grüße,
Utz
Rehi,
so, das Script schnurrt jetzt durch, das ist schon mal ganz prima (der Fehler kam daher, dass ich Trottel vergesen hatte, eine ungültige DOCTYPE-Referenz auszukommentieren *grummel*).
Meine Hoffnung, dass damit auch der "direkte" Weg ginge, hat sich aber leider nicht bestätigt - immer noch tote Hose!
Grüße,
Utz
Hi Utz,
Aus vergangenen Threads hörte ich unterschiedliche Meinungen dazu, ob der IE 5.0 jetzt Dateninseln (XML in HTML) darstellen kann oder nicht.
Ich hab gerade versch. Beispiele abgetippt (aus den MSDN Online Libraries und aus dem XML-Einsteigerseminar von Seeboerger-Weichselbaum {soll ja Fehler haben, ich weiß}), nix davon führt zu Anzeigen oder wenigstens Fehlermeldungen, wird also völlig ignoriert.
Geht das denn nur in bestimmten Subversionen? Oder wie?
Ohne Workarounds (leider kenn ich keinen :-() erkennt der IE 5.0 keine *externen* Dateninseln bzw. zeigt sie nicht an, also genau das was du versuchst.
Was funktioniert ist das direkte reinschreiben von XML-Code in HTML:
<XML ID="test">
.....
</XML>
Gruß
Franz
Hi Franz,
vielen Dank für die Nachricht - ich hatte wirklich schon an meinen Fähigkeiten gezweifelt.
Das Workaround von Andreas (weiter unten) funktioniert übrigens prima, und muss auch gar nicht so groß sein wie gepostet (weil dort mit viel Nebenfunktionalität).
Falls es interessiert: folgender (im Vergleich zu Andreasens Beispiel auf das wichtigste abgespeckter) Code funktioniert für Dateninseln im IE 5:
<HTML>
<HEAD>
<TITLE>irgendwas</TITLE>
<SCRIPT Language="JScript">
var source;
var sheet;
function DokuLaden()
{
source = new ActiveXObject("Microsoft.XMLDOM");
sheet = new ActiveXObject("Microsoft.XMLDOM");
// Hier wird die einzubindende XML-Datei definiert
source.load("beispiel.xml");
// Und hier das dazugehörige Stylesheet
sheet.load("beispiel.xsl");
result = source.transformNode(sheet.documentElement);
// Ausgabe im HTML-Format im Abschnitt "showResult" im Body
showResult.innerHTML = result;
}
</SCRIPT>
</HEAD>
<BODY>
<DIV id="showResult"></DIV>
</BODY>
</HTML>
Weiter oben <63785.html> gibt's noch ein weiteres, noch einfacheres und noch elganteres Workaround von Rico, das ich aber erst am Montag zum Testen komme.
Nochmals danke!
Grüße,
Utz