AW: XML Dateien zusammenführen
Ok, ok .. nicht so schnell und so viele Fachbegriffe
... ich habe zwar ein php Script das mit Hilfe von SimpleXML die Dateien holt und ablegt und das kann ich mehr oder weniger gut auch anpassen, aber selbst ein bauen ist eher problematisch, da bräuchte ich wohl ein Beispiel, um dann selbst weiter machen zu können
Die Einträge (Eintrag 1, 2 usw.) heißen übrigens alle gleich und unterscheiden sich dann nur im Inhalt der Werte ...
*edit*
Ich habe im Selfhtml Forum etwas gefunden, was meinem Problem schon recht nah kommt ...
<root>
<wert gleichesattribute="schluessel_x" attribute_1="wert_x1" attribute_2="wert_x2"/>
<wert gleichesattribute="schluessel_y" attribute_1="wert_y1" attribute_2="wert_y2"/>
...
...
</root>
XML-File 2
<root>
<wert gleichesattribute="schluessel_x" attribute_3="wert_x3" attribute_4="wert_x4"/>
<wert gleichesattribute="schluessel_y" attribute_3="wert_y3" attribute_4="wert_y4"/>
...
...
</root>
PHP:
<?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>';
?>
Das fügt die Inhalte den passenden Werten hinzu, was ich aber habe ist das hier:
Code:
XML File 1
<AlleSpiele>
<Spielklasse>
<Name>KL Herren</Name>
</Spielklasse>
<Spiel>
<Attribut1>
<...>
<Attribut22>
</Spiel>
<Spiel>
<...>
</Spiel>
usw.
</AlleSpiele>
XML-File 2
<AlleSpiele>
<Spielklasse>
<Name>KL Damen</Name>
</Spielklasse>
<Spiel>
<Attribut1>
<...>
<Attribut22>
</Spiel>
<Spiel>
<...>
</Spiel>
usw.
</AlleSpiele>
Davon gibt es dann 10 Dateien, die alle so aufgebaut sind. Vom Prinzip her reicht es wenn ich nur die Spiele mit den Attributen in die neue Datei zusammenführen kann, aber ideal wäre der komplette Inhalt, da man so auch noch die Liga(Spielklasse) abfragen kann.
Wie kann ich den Lösungsvorschlag verändern um mein Problem zu lösen bzw. kann ich den überhaupt verwenden?
Gruß
Jens