XML und XSLT als Quelle in XHTML?
Kiwisaft
- xml
Hallo,
ist es möglich ein einer .html Datei einfach als Datenquelle eine .xml Datei anzugeben und als Stylesheet eine .xslt Datei und evtl auch noch eine .dso Datei.
also so in der Art:
<html>
<.... src="daten.xml .../>
<.... src="stylesheet.xslt .../>
<.... src="scheme.xsd .../>
<body>
...der aus xml und xslt vom Browser geparste Inhalt...
</body>
</html>
Hab dazu leider noch nichts gefunden :/
Danke schonmal für die Hilfe.
@@Kiwisaft:
ist es möglich ein einer .html Datei einfach als Datenquelle eine .xml Datei anzugeben und als Stylesheet eine .xslt Datei und evtl auch noch eine .dso Datei.
Nein.
Wo soll die Transformation stattfinden?
Clientseitig? Dann enthält deine XML-Ressource die Verarbeitungsanweisung <?xml-stylesheet type="text/xsl" href="stylesheet.xslt" ?>
und der Client fordert die Ressource "stylesheet.xslt" vom Server an und verarbeitet beides. (Oder auch nicht.) Es existiert keine HTML-Datei; der HTML-Code liegt nur intern im Browser vor.
Serverseitig? Dann musst du die Transformation anstubsen, bspw. mit einem PHP-Script, dass die XML- und XSLT-Ressourcen lädt, die Transformation startet und deren Ergebnis als HTML an den Client schickt.
Hab dazu leider noch nichts gefunden :/
?? SELFHTML: Darstellung von XML-Daten
Vielleicht hilft dir auch dieser Thread weiter.
Live long and prosper,
Gunnar
@@Kiwisaft:
ist es möglich ein einer .html Datei einfach als Datenquelle eine .xml Datei anzugeben und als Stylesheet eine .xslt Datei und evtl auch noch eine .dso Datei.
Nein.
Wo soll die Transformation stattfinden?
Danke für die schnelle Antwort
Die Transformation soll clientseitig stattfinden.
Das Problem ist, dass meine xml automatisch generiert wird und nicht den Typischen Kopf:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xslt"?>
enthält.
Wenn ich die beiden Zeilen von hand reinschreibe klappt die darstellung auch im ie und ff. Allerdings will ich vermeiden jedesmal die beiden Zeilen einzufügen. Vielleicht wärs ja über AJAX oder do möglich?
Die Darstellung von XML Daten hab ich mir auch schon angeschaut - klappt ja auch schon, nur eben nicht ganz so wie ichs haben will.
@@Kiwisaft:
Das Problem ist, dass meine xml automatisch generiert wird und nicht den Typischen Kopf:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xslt"?>
enthält.
Warum nicht? Warum lässt du die Verarbeitunsanweisung nicht auch automatisch generieren?
Vielleicht wärs ja über AJAX oder do möglich?
Du kannst die Transformation auch mit JavaScript starten. (Natürlich ohne Gewähr, dass JavaScript beim Client ausgeführt wird.)
Der erste Google-Treffer bei "XSLT Javascript" ergibt einen Thread im SELFHTML-Forum-Archiv.
Live long and prosper,
Gunnar
Das Problem ist, dass meine xml automatisch generiert wird und nicht den Typischen Kopf:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xslt"?>
enthält.Warum nicht? Warum lässt du die Verarbeitunsanweisung nicht auch automatisch generieren?
»»
Auf die Generierung hab ich leider keinen Einfluss
Vielleicht wärs ja über AJAX oder do möglich?
Du kannst die Transformation auch mit JavaScript starten. (Natürlich ohne Gewähr, dass JavaScript beim Client ausgeführt wird.)
Der erste Google-Treffer bei "XSLT Javascript" ergibt einen Thread im SELFHTML-Forum-Archiv.
Ok, das Gute ist, dass es nur bei mir und nur in einem Browser funktionieren muss :)
Danke mal soweit, ich werd den Ansatz mit JS mal weiter verfolgen. Scheint ja möglich zu sein.
HIER DIE LÖSUNG:
<html>
<head>
<script>
function loadXMLDoc(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation
&& document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}
function displayResult()
{
xml=loadXMLDoc("cdcatalog.xml");
xsl=loadXMLDoc("cdcatalog.xsl");
// code for IE
if (window.ActiveXObject)
{
ex=xml.transformNode(xsl);
document.getElementById("example").innerHTML=ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation
&& document.implementation.createDocument)
{
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml,document);
document.getElementById("example").appendChild(resultDocument);
}
}
</script>
</head>
<body id="example" onLoad="displayResult()">
</body>
</html>