Biks: Übergabeprameter in XSL ermitteln

Beitrag lesen

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/#m940434

Grüß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() &gt; 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