Dennis: xml daten zusammenführen

Beitrag lesen

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.