Die von Thomas genannten Beispiele sind wirklich gut und dienten mir als Vorlage:
Falls ja, wie kann ich die in Javascript erzeugte Variable dem XSL-Code zuführen?
ein Beispiel findest du unter:
http://forum.de.selfhtml.org/archiv/2006/3/t126420/#m815491 oder
http://forum.de.selfhtml.org/archiv/2007/1/t144951/#m940434Grüße
Thomas
Ich konnte das nun auch nach meinen Wünschen umsetzen - zumindestens fast. Hier meine Lösung, vielleicht hilft es ja jemanden weiter. Unterm Strich ist es der Code von Thomas, nur mit einer Parameterübergabe der URL-Adresse an die XSL-Daten. --> Danach habe ich noch zwei weitere Fragen <--
------------------XML-Daten------------------
<?xml version='1.0'?>
<pwdb>
<station name="ort1" verband="region1">
<tag>gross</tag>
</station>
<station name="ort2" verband="region1">
<tag>gross</tag>
</station>
<station name="ort3" verband="region1">
<tag>gross</tag>
</station>
<station name="ort4" verband="region2">
<tag>klein</tag>
<tag>gross</tag>
</station>
<station name="ort5" verband="region2">
<tag>klein</tag>
</station>
<station name="ort6" verband="region2">
</station>
<station name="ort7" verband="region3">
<tag>klein</tag>
</station>
<station name="ort8" verband="region3">
</station>
</pwdb>
------------------XSL-Daten------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="eigeneAdresse"/>
<xsl:template match="/">
<xsl:apply-templates select="pwdb"/>
</xsl:template>
<xsl:template match="pwdb">
<xsl:variable name="ort" select="substring-after($eigeneAdresse,'name=')"/>
<xsl:for-each select="station[@name=substring-after($eigeneAdresse,'name=')]">
<div>
Name: <xsl:value-of select="@name"/><br />
Verband: <xsl:value-of select="@verband"/><br />
Merkmal: <xsl:apply-templates select="tag"/>
</div>
</xsl:for-each>
<br />
</xsl:template>
<xsl:template match="tag">
<xsl:if test="position() > 1">
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
------------------HTML-Daten------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Pumpenstation</title>
[code lang=javascript]<script language="JavaScript" type="text/javascript">
var XMLDatei = "pumpenwerke.xml"; // Pafad zur XML-Datei
var XSLDatei = "pumpenstation.xsl"; // Pafad zur XSL-Datei
var objectXML;
var objectXSL;
var objectXSLCache;
var objectXSLTProcessor;
var HTMLAusgabe;
function transformation() {
// Abfrage für den Internet Explorer
if (window.ActiveXObject) {
// XML laden
objectXML = new ActiveXObject("MSXML2.DOMDocument");
objectXML.async = false;
objectXML.load(XMLDatei);
// XSL laden
objectXSL = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.4.0");
objectXSL.async = false;
objectXSL.load(XSLDatei);
//cachen das XSLT für bessere performance
objectXSLCache = new ActiveXObject("Msxml2.XSLTemplate.4.0");
objectXSLCache.stylesheet = objectXSL;
}
// Abfrage für Mozilla / Netscape
else if (window.ChromeWindow) {
// Im Mozilla erst XSL laden
objectXSLTProcessor = new XSLTProcessor();
objectXSL = new XMLHttpRequest();
objectXSL.open("GET", XSLDatei, false);
objectXSL.send(null);
objectXSL = objectXSL.responseXML;
objectXSLTProcessor.importStylesheet(objectXSL);
// XML laden
objectXML = new XMLHttpRequest();
objectXML.open("GET", XMLDatei, false);
objectXML.send(null);
objectXML = objectXML.responseXML;
}
else {
alert("Ihr Browser unterstützt leider keine XML-XSL-Transformation mittels JavaScript");
}
refreshresults(); //führt die 1. tranformation aus mit dem wert aus dem ui.formular
}
function refreshresults() {
if (window.ActiveXObject) {
objectXSLTProcessor = objectXSLCache.createProcessor();
objectXSLTProcessor.input = objectXML;
objectXSLTProcessor.addParameter("eigeneAdresse", document.URL, "");
objectXSLTProcessor.transform();
document.getElementById("results").innerHTML = objectXSLTProcessor.output;
}
else if (window.ChromeWindow) {
var myParam = objectXSLTProcessor.getParameter(null, "eigeneAdresse");
objectXSLTProcessor.setParameter(null, "eigeneAdresse", document.URL);
HTMLAusgabe = objectXSLTProcessor.transformToFragment(objectXML, document);
document.getElementById("results").innerHTML = "";
document.getElementById("results").appendChild(HTMLAusgabe);
}
}
</script>
<style type="text/css">
html, body {
height:100%;
margin:0px;
padding:0px;
}
body { background-color:#909090; }
</style>
</head>
<body onload="transformation();" id="results">
</body>
</html>
[/code]
Das funktioniert unter Firefox 3.0 sehr gut, aber leider nicht beim IE 8 beta:
"Die Datei '.....?name=ort2' wurde nicht gefunden. Überprüfen Sie die Schreibweise und wiederholen Sie den Vorgang."
Ist das ein generelles IE-Problem oder nur von der 8-Beta? (Konnte das selbst noch nicht austesten, vielleicht hat einer eine Idee dazu)
Auch die Bildergalerie von Thomas nahm ich als Vorlage (http://forum.de.selfhtml.org/archiv/2006/3/t126420/#m815491). Nur möchte ich anstatt eines Bildes, oben genannte HTML-Seite in dem rechten großen Bereich öffnen. Dazu müsste ich die showmed-Funktion anzupassen. Einer meiner Versuche ist folgender:
function showmed(title) {
var staturl = "pumpenstation.html?name=" + title;
var myHREF = document.createElement("a");
var Ausgabebereich = document.getElementById("med");
myHREF.appendChild(staturl);
Ausgabebereich.appendChild(myHREF);
}
Aber das haut nicht hin.
Ist es möglich, innerhalb eines div-Bereiches eine HTML-Datei aufzurufen? Wie würde der Code entweder richtig für div bzw. wie mit iframe aussehen?
Viele Grüße und vielen Dank nochmal an Thomas!
Biks