Hi hh,
Mit XSL kenne ich mich leider nicht wirklich aus - ich bin mir da aber auch nicht sicher, ob es sich damit überhaupt machen ließe, denn XSL ist ja nur eine Art Stylesheet für eine XML-Datei - ich glaube eher nicht, dass du mit XSL eine zweite Datei "dazu laden" kannst.
Kurz um, ich würde so etwas mit einer beliebigen Programmiersprache meiner Wahl lösen - z.B. mit PHP. Mit PHP5 und SimpleXML sollte das auch nicht so schwer sein - ich habe mal ein kleines Script geschrieben (siehe auch hier: Zusammenführung zweier XML-Dateien):
<?php
// Die beiden XML-Dateien einlesen
$xml1 = simplexml_load_file("1.xml");
$xml2 = simplexml_load_file("2.xml");
// Element-Baum initialisieren
$data = array();
// Erste Datei durchgehen
foreach($xml1->wert as $wert) {
// und jedes Element anhand seiner ID (gleiches Attribut)
// in den Element-Baum einhängen
$id = (string) $wert['gleichesattribute'];
$data[$id] = array();
// Alle Attribute in den Element-Baum übernehmen
foreach($wert->attributes() as $name => $value) {
// mit Ausnahme der ID, die ja bereits als Key existiert
if($name == "gleichesattribute") continue;
$data[$id][$name] = (string) $value;
}
}
// Zweite Datei durchgehen
foreach($xml2->wert as $wert) {
// und jedes Element anhand seiner ID (gleiches Attribut)
// in den Element-Baum einhängen, sofern noch nicht vorhanden
$id = (string) $wert['gleichesattribute'];
if(!isset($data[$id])) {
$data[$id] = array();
}
// Alle Attribute in den Element-Baum übernehmen
foreach($wert->attributes() as $name => $value) {
// mit Ausnahme der ID, die ja bereits als Key existiert
if($name == "gleichesattribute") continue;
$data[$id][$name] = (string) $value;
}
}
// Header für XML-Ausgabe senden
header("Content-type: application/xml");
// XML-Ausgabe generieren
echo '<root>';
// Für jedes Element im Element-Baum
foreach($data as $id => $record) {
// Den XML-Tag...
echo '<wert gleichesattribute="' . $id . '" ';
// ... mit allen Attributen generieren
foreach($record as $name => $value) {
echo $name . '="' . $value . '" ';
}
echo '/>';
}
echo '</root>';
?>
Eigentlich eine simple Sache - aber man benötigt eben PHP5 mit SimpleXML. ;-)
MfG, Dennis.