# XSLT Transformation "ohne Server"



## byte (11. Dez 2005)

Hallo,

folgendes Problem: ich habe eine XSLT Datei geschrieben zu XML-Dateien, die über das Internet erreichbar sind. Ich möchte nun ohne Java Webserver die Transformation auf einer HTML Seite durchführen. Leider funktioniert das ganze bei mir nur unterm Internet Explorer, ich schätze mal wegen dem ActiveX Kram.


```
<script type="text/javascript">

// Load XML 
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("http://www.hier.de/die/externe/datenquelle.xml")

// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("stylesheet.xsl")

// Transform
document.write(xml.transformNode(xsl))

</script>
```


Gibts da vielleicht eine Allround Lösung, die auch unter den anderen gängigen Browsern (vor allem Firefox) funktioniert? Wenn nein, gibt es unterschiedliche browserabhängige Lösungen, so dass man per Javascript erstmal den Browser checkt und dann die spezifische Transformation macht? Achso, folgende triviale Lösung kommt natürlich nicht in Betracht, der XML-Datei folgende Zeile hinzuzufügen:


```
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
```

weil die XML-Datei wie gesagt extern im Netz liegt.


Ich weiss, das Problem ist eher ein HTML/Javascript Problem. Bei Bedarf muss ein Mod den Thread halt verschieben. 

MFG


----------



## Bleiglanz (12. Dez 2005)

das versteh ich nicht

```
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
```
sollte doch ohne Probleme funktionieren, dein Code macht ja auch nix anderes

```
[url]http://www.hier.de/die/externe/datenquelle.xml[/url]
// holt datenquelle.xml vom entfernten Host
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
// holt automatitsch 
[url]http://www.hier.de/die/externe/stylesheet.xsl[/url]
```


----------



## byte (12. Dez 2005)

Ich hab mich vielleicht ein bißchen unschön ausgedrückt. Mein Problem ist ja folgendes: klar könnte ich der XML-Datei ein Stylesheet zuweisen mit der o.g. Zeile. Aber dafür müsste ich ja die (externe) XML-Datei bearbeiten. Da sich die aber ständig ändern kann, wäre das doch etwas unschön. Der obige Code macht im Prinzip auch nix anderes, das stimmt. Aber es funktioniert, ohne der XML-Datei explizit das Stylesheet zuzuweisen, leider dank ActiveX nur auf dem MS Internet Explorer.

Die externe XML-Datei ist immer über die selbe Adresse im Netz verfügbar, ändert sich aber alle paar Stunden. Das Stylesheet ist immer gleich und macht ne HTML-Transformation zur Repräsentation der Daten im Browser.


----------



## Bleiglanz (12. Dez 2005)

wenn sich die xml Datei nur alle paar stunden ändert dann wärs am besten sie gleich nach der änderung am server durch einen xslt prozessor zu jagen und html daraus zu machen?

zweitbeste lösung wärs, die <?xml-stylesheet direktive ins xml mit aufzunehmen (stört ja nicht), das können die meisten aktuellen browser ohne probleme auflösen

drittbeste ist wohl javascript: wenn du dich durch den aktuellen AJAX-Hype-Geschwurbel-Wust durchgoogelst, findest du bestimmt eine Crossbrowser Implementierung für dein Problem


----------



## byte (12. Dez 2005)

Bleiglanz hat gesagt.:
			
		

> wenn sich die xml Datei nur alle paar stunden ändert dann wärs am besten sie gleich nach der änderung am server durch einen xslt prozessor zu jagen und html daraus zu machen?



Auf den Server und die Aktualisierung der XML-Datei habe ich keinen Einfluß.



> zweitbeste lösung wärs, die <?xml-stylesheet direktive ins xml mit aufzunehmen (stört ja nicht), das können die meisten aktuellen browser ohne probleme auflösen



Stören tuts nicht, aber ich will mich ja nicht alle paar Stunden hinsetzen, die XML-Datei runterladen und per Hand die Direktive einfügen, damit meine Transformation per Browser funktioniert. :roll:



> drittbeste ist wohl javascript: wenn du dich durch den aktuellen AJAX-Hype-Geschwurbel-Wust durchgoogelst, findest du bestimmt eine Crossbrowser Implementierung für dein Problem



Habe grade erfahren, dass der Webserver PHP kann. Ich werde mal schauen, wie/ob man das mit PHP realisieren kann. Denn eigtl. hasse ich JavaScript und habs bei mir zum größten Teil deaktiviert. 

Trotzdem danke.


----------



## Bleiglanz (12. Dez 2005)

sollte mit der neueren php auch kein problem das am Server zu machen


```
<?php
// so ungefähr der Standardweg
$xml = new DOMDocument;
$xml->load('http://www.hier.de/die/externe/datenquelle.xml');
$xsl = new DOMDocument;
$xsl->load('http://www.hier.de/die/externe/stylesheet.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
```


----------



## byte (12. Dez 2005)

Super, danke.


----------

