28.
XML + XSL —> HTML (21.05.2000)
Der MSIE 5.x verarbeitet XML-Dateien und stellt diese als Baumstruktur dar. Mittels XSL-Anweisungen lassen sich die XML-Daten in eine "Browser-kompatiblere" Darstellung
überführen. In der Quellcode-Ansicht wird jedoch nicht das evtl. zur Weiterverarbeitung benötigte HTML-Dokument angezeigt, sondern der Original-XML-Code.
Auch ohne zusätzliche Software gibt der IE diese Informationen preis. Der Schlüssel ist das im IE implementierte MS-XML-DOM (Document Object Model).
Im folgenden Beispiel wird eine XML-Bücherliste als Tabelle ausgegeben. Die verwendeten Dateien haben diese Struktur:
buecher.dtd – die Document Type Definition
<!ELEMENT buecher (eintrag)+>
<!ELEMENT eintrag (autor, titel, verlag, jahr, preis, isbn)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT verlag (#PCDATA)>
<!ELEMENT jahr (#PCDATA)>
<!ELEMENT preis (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>
<!ATTLIST eintrag nr CDATA #REQUIRED>
buecher.xml – die eigentlichen XML-Daten
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet href="buecher.xsl" type="text/xsl" ?>
<!DOCTYPE buecher SYSTEM "buecher.dtd">
<buecher>
<eintrag nr="001">
<autor>Chuck Musciano / Bill Kennedy</autor>
<titel>HTML - Das umfassende Referenzwerk</titel>
<verlag>O'REILLY Verlag</verlag>
<jahr>1999</jahr>
<preis>69.00 DM</preis>
<isbn>3-89721-102-5</isbn>
</eintrag>
<eintrag nr="002">
...
</eintrag>
</buecher>
buecher.xsl – das Stylesheet zur Umwandlung in HTML
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Buecherliste</TITLE>
<LINK REL="stylesheet" HREF="buecher.css" TYPE="text/css" />
</HEAD>
<BODY BGCOLOR="#EEEEEE">
<H2>XML-Buecherliste als Tabelle</H2>
<TABLE BORDER="1" WIDTH="100%">
<TR CLASS="ueberschrift">
<TD>Nr.</TD>
<TD>Autor</TD>
<TD>Titel</TD>
<TD>Verlag</TD>
<TD>Jahr</TD>
<TD>Preis</TD>
<TD>ISBN</TD>
</TR>
<xsl:for-each select="buecher/eintrag">
<TR>
<TD CLASS="schwarz"><xsl:value-of select="@nr" /></TD>
<TD CLASS="blau"><xsl:value-of select="autor" /></TD>
<TD CLASS="rot"><xsl:value-of select="titel" /></TD>
<TD CLASS="gruen"><xsl:value-of select="verlag" /></TD>
<TD CLASS="schwarz"><xsl:value-of select="jahr" /></TD>
<TD CLASS="blau"><xsl:value-of select="preis" /></TD>
<TD CLASS="orange"><xsl:value-of select="isbn" /></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
Zur Formatierung der XML-Daten kommt zusätzlich die externe CSS-Datei buecher.css zum Einsatz.
Das Grundprinzip der Verarbeitung zeigt die JavaScript-Funktion ConvertXML2HTML(). Aus den Forumularfeldern werden die Namen der XML- bzw. XSL-Dateien ausgelesen und anschließend
durch ActiveX-Methodenaufrufe verarbeitet. Das Ergebnis ist HTML-Code, der in einen TEXTAREA-Bereich geschrieben wird und mittels Zwischenablage weiterverarbeitet werden kann.
Anmerkung: Das Script funktioniert nur, wenn im IE die Optionen "ActiveX-Steuerelemente ausführen, die für Scripting sicher sind" und "ActiveX-Steuerelemente ausführen"
eingeschaltet sind.
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function ConvertXML2HTML()
{
var xmlfile, xslfile, xmlinput, xslinput;
// Dateinamen uebergeben
xmlfile=document.inout.xml.value;
xslfile=document.inout.xsl.value;
// XML laden
xmlinput = new ActiveXObject("Microsoft.XMLDOM");
xmlinput.async = false;
xmlinput.load(xmlfile);
// XSL laden
xslinput = new ActiveXObject("Microsoft.XMLDOM");
xslinput.async = false;
xslinput.load(xslfile);
// generierten HTML-Code ausgeben
document.inout.code.value =
xmlinput.transformNode(xslinput.documentElement);
}
//-->
</SCRIPT>
In der zum Download bereit stehenden "Komfortversion" lassen sich die Dateien mittels Dateidialog auswählen (TYPE="file" statt TYPE="text" in den INPUT-Feldern). Zusätzlich wurde das lokale Abspeichern des HTML-Outputs ermöglicht. Dabei wird das "File System Object" (FSO) verwendet.
function OutputHTML()
{
var filename, fso;
if ((document.inout.html.value=="") || (document.inout.code.value==""))
{
alert("Kein HTML-Dateiname angegeben\noder kein HTML-Output vorhanden!")
}
else
{
fso=new ActiveXObject("Scripting.FileSystemObject");
filename=fso.CreateTextFile(document.inout.html.value);
filename.write(document.inout.code.value);
filename.close();
}
}
|