Hallo, danke noch einmal für die rege Unterstützung in diesem Forum! 
Ich habe folgende Aufgabe, die mir die letzte Nacht geraubt hat.
Ich lese eine XML aus und schreibe die Werte in ein DOM. Die Ergebnisse schreibe ich anschließend in eine DB.
Das funktioniert auch inzwischen sehr gut. Nun habe ich aber ein Problem mit einer Schleife.
Es werden aus der XML mehrere IDs für Elemente ausgelesen.
Nun soll in einer weiteren Schleife jede einzelne ID in der XML durchlaufen werden und die zugehörigen Referenzen gefunden werden.
So kann zum Beispiel die ID i1931 auf zwei weitere Ref_IDs verweisen. Diese sollen anschließend als Array in die zugehörige Zeile der ID in meiner DB geschrieben werden.
Also zum Beispiel:
Mein aktueller Code Schreibt diese Werte zwar in meine DB, nur leider immer nur für eine ID.
Wie kann ich die Schleife in der Schleife dazu bringen diesen Durchlauf mehrfach zu machen?
Hier der Code:
Ich habe ebenfalls versucht, die Werte in einer separaten Schleife Durchlaufen zu lassen, hierbei werden aber die Ergebnisse alle in einen Array geschrieben:
Ich hoffe ihr könnt mir helfen, ich will es endlich mal verstehen!

Ich habe folgende Aufgabe, die mir die letzte Nacht geraubt hat.
Ich lese eine XML aus und schreibe die Werte in ein DOM. Die Ergebnisse schreibe ich anschließend in eine DB.
Das funktioniert auch inzwischen sehr gut. Nun habe ich aber ein Problem mit einer Schleife.
Es werden aus der XML mehrere IDs für Elemente ausgelesen.
HTML:
[0] => i2121
[1] => i2166
[2] => i2076
[3] => i1931
[4] => i2014
Nun soll in einer weiteren Schleife jede einzelne ID in der XML durchlaufen werden und die zugehörigen Referenzen gefunden werden.
So kann zum Beispiel die ID i1931 auf zwei weitere Ref_IDs verweisen. Diese sollen anschließend als Array in die zugehörige Zeile der ID in meiner DB geschrieben werden.
Also zum Beispiel:
ID | Ref_IDs |
---|---|
i2121 | ["i2132","i2140"] |
i1931 | ["i1948","i1980"] |
... | ... |
Mein aktueller Code Schreibt diese Werte zwar in meine DB, nur leider immer nur für eine ID.
Wie kann ich die Schleife in der Schleife dazu bringen diesen Durchlauf mehrfach zu machen?
Hier der Code:
PHP:
// Alle Wände im Informationsmodell suchen und die ID's in einen Array schreiben.
$IDXMLQuery = '//*/ifc:IfcWallStandardCase/@id';
$allWallNodes = $xpath->query($IDXMLQuery);
foreach ($allWallNodes as $WallIdNode){
$WallId = $WallIdNode->nodeValue;
$stmt = $db->prepare("SELECT XML_ID FROM ifcwall WHERE XML_ID=?");
$stmt->bind_param('s', $WallId);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0){
echo "IDs bereits vorhanden";}
// Wenn abgefragte XML-IDs nicht vorhanden sind, werden sie in die DB geschrieben.
else{
echo "ID nicht da";
// Denition der Abfragepfade basierend auf der Wall-ID.
$GUIDXMLQuery = "//ifc:IfcWallStandardCase[@id='{$WallId}']/ifc:GlobalId";
$NameXMLQuery = "//ifc:IfcWallStandardCase[@id='{$WallId}']/ifc:Name";
$PsetIDXMLQuery = "//ifc:IfcRelDefinesByProperties/ifc:RelatedObjects/*[@ref='{$WallId}']/ancestor::ifc:IfcRelDefinesByProperties/@id";
$RelPsetXMLQuery = "//ifc:IfcRelDefinesByProperties/ifc:RelatedObjects/*[@ref='{$WallId}']/ancestor::ifc:IfcRelDefinesByProperties/@id";
$stmt = $db->prepare("INSERT INTO ifcwall (XML_ID, GUID, Name, Pset_ID) VALUES (?, ?, ?, ?)");
foreach($xpath->query($GUIDXMLQuery) as $wallGuidNode){
foreach($xpath->query($NameXMLQuery) as $wallNameNode)
//foreach($xpath->query($PsetIDXMLQuery) as $wallPsetNode)
foreach($xpath->query($RelPsetXMLQuery) as $RelPsetNode){
$Ref_ID[] = $RelPsetNode->nodeValue;
$string = json_encode($Ref_ID);
}
$stmt->bind_param("ssss", $WallId, $wallGuidNode->nodeValue, $wallNameNode->nodeValue, $string);
$stmt->execute();
}// Ender der Inneren Schleife zum Definieren der Variablen und Schreiben der Werte in die DB.
}//Ende Else
}// Ende Hauptschleife
Ich habe ebenfalls versucht, die Werte in einer separaten Schleife Durchlaufen zu lassen, hierbei werden aber die Ergebnisse alle in einen Array geschrieben:
PHP:
$IDXMLQuery2 = '//*/ifc:IfcWallStandardCase/@id';
$allWallNodes2 = $xpath->query($IDXMLQuery2);
foreach ($allWallNodes2 as $WallIdNode2){
$WallId2 = $WallIdNode2->nodeValue;
$GUIDXMLQuery = "//ifc:IfcRelDefinesByProperties/ifc:RelatedObjects/*[@ref='{$WallId2}']/ancestor::ifc:IfcRelDefinesByProperties/@id";
foreach($xpath->query($GUIDXMLQuery) as $wallGuidNode){
$Ref[] = $wallGuidNode->nodeValue;
}
$string = json_encode($Ref);
}
echo '<pre>', print_r($string), '</pre>';
Ich hoffe ihr könnt mir helfen, ich will es endlich mal verstehen!
