Hallo,
zunächst erstmal danke für eure Hilfe so far. Ich möchte XML Daten über eine XSL Datei darstellen und aus einer HTML einzelne Datensätze anzufragen und darzustellen. Die Dateien sehen wie folgt aus:
[...]
Wie kann ich jetzt die XML Datei aufrufen, dass nur ein Datensatz angezeigt wird? Es gibt wohl auch schon ein Thread dazu, nämlich
http://forum.de.selfhtml.org/archiv/2006/3/t126420/#m815491 aber das ist mir ein wenig zu kompliziert. Ich habe auch leider keine Zeit mich da großartig einzulesen. Ich brauche nur einen Einfachen Mechanismus, das File so zu öffnen, dass der Datensatz angezeigt wird. Das ganze kann auch nur im Browser funktionieren, da ich keinen Server habe um das ganze Serverseitig abzuwicklen.
Wäre für eure Hilfe echt dankbar.
OK, wenn das Bsp. dir zu kompliziert ist, machen wir das einfacher (aber ein "habe [...] keine Zeit mich da [...] einzulesen" kann für die Zukunft fatal sein):
Am besten du gehst von einer HTML-Datei aus:
-------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Prozesse</title>
<script language="JavaScript" type="text/javascript">
var XMLDatei = "prozesse.xml"; // Pafad zur XML-Datei
var XSLDatei = "prozesse.xsl"; // Pafad zur XSL-Datei
var objectXML;
var objectXSL;
var objectXSLCache;
var objectXSLTProcessor;
var HTMLAusgabe;
var idparam = "";
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");
}
//erste Transformation mit leerem Parameter aufrufen:
refreshresults(idparam);
}
function refreshresults(idparam) {
if (window.ActiveXObject) {
objectXSLTProcessor = objectXSLCache.createProcessor();
objectXSLTProcessor.input = objectXML;
objectXSLTProcessor.addParameter("idparam", idparam, "");
objectXSLTProcessor.transform();
document.getElementById("results").innerHTML = objectXSLTProcessor.output;
}
else if (window.ChromeWindow) {
var myParam = objectXSLTProcessor.getParameter(null, "idparam");
objectXSLTProcessor.setParameter(null, "idparam", idparam);
HTMLAusgabe = objectXSLTProcessor.transformToFragment(objectXML, document);
document.getElementById("results").innerHTML = "";
document.getElementById("results").appendChild(HTMLAusgabe);
}
}
</script>
</head>
<body onload="transformation();" id="results">
</body>
</html>
----------------------
Die XSL-Datei sollte dazu so in etwas aussehen (ich habe ein Formular eingebaut, da ich nicht wusste wie du eigentlich die IDs zu übergeben beabsichtigst)
--------------------------------------
<?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="idparam"/>
<xsl:template match="Prozesse">
<form id="pForm" name="pForm">
<select name="prozesse" onchange="refreshresults(this.form.prozesse.options[this.form.prozesse.selectedIndex].value);">
<option value="">
<xsl:if test="$idparam = ''"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
xsl:textProzess wählen</xsl:text>
</option>
<xsl:for-each select="Prozess">
<option value="{@id}">
<xsl:if test="$idparam = @id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
xsl:textProzess: </xsl:text><xsl:value-of select="@id" />
</option>
</xsl:for-each>
</select>
</form>
<div>
ID: <xsl:value-of select="$idparam"/><br />
Bereich: <xsl:value-of select="Prozess[@id = $idparam]/Bereich/text()"/><br />
Verantwortlicher: <xsl:value-of select="Prozess[@id = $idparam]/Verantwortlicher/text()"/><br />
Durchfuehrender: <xsl:value-of select="Prozess[@id = $idparam]/Durchfuehrender/text()"/><br />
Daten<br />
Eingang: <xsl:value-of select="Prozess[@id = $idparam]/Daten/Eingang/text()"/><br />
Ausgang: <xsl:value-of select="Prozess[@id = $idparam]/Daten/Ausgang/text()"/><br />
</div>
</xsl:template>
</xsl:stylesheet>
-----------------------------------
Aus deinem XML kannst du die Zeile: <?xml-stylesheet type="text/xsl" href="..." ?> entfernen.
Ich habe dir zusätzlich alle drei Dateien als Test unter http://meta-text.net/test/prozesse.html hingestellt.
Grüße
Thomas