Ik heb een lijst met xml-bestanden die elk productinformatie bevatten. Uit deze xml structuur moet ik een aantal waarden vissen, zoals een productId, product omschrijving, categorieId, etc. Met behulp van de domxml module rol ik de xml structuur uit in een xmltree: een combinatie van objects en arrays. In dit geval doe ik dus de volgende aanroep:
Omdat elk bestand deels een andere structuur heeft kan ik niet zeggen dat de 'productId' bij elk bestand te vinden is onder bijvoorbeeld $xmlTree->children[2]->attributes[3]->name;. In de ene tree is het mogelijk dat de $productId te vinden is in de tweede dimensie van de xmlTree, bij een ander zou het net zo goed de derde dimensie kunnen zijn, of de vierde.
Ik heb dus een functie geschreven die systematisch de structuur langsloopt opzoek naar bijvoorbeeld 'productId'. Tijdens het langslopen van de tree, houdt hij in een string bij waar hij op dat moment zit. Op het moment dat de 'productId' gevonden is, heb ik dus in een string het juiste 'pad' staan naar die productId. Het pad is nu bijvoorbeeld:
PHP:
$file is hierbij de content van het xml bestand in deze string. De totale functie gaat alle xml-bestanden met productinformatie langs en leest de benodigde waarden (in totaal een stuk of acht) uit.1
| $xmlTree = domxml_xmltree($file) |
Omdat elk bestand deels een andere structuur heeft kan ik niet zeggen dat de 'productId' bij elk bestand te vinden is onder bijvoorbeeld $xmlTree->children[2]->attributes[3]->name;. In de ene tree is het mogelijk dat de $productId te vinden is in de tweede dimensie van de xmlTree, bij een ander zou het net zo goed de derde dimensie kunnen zijn, of de vierde.
Ik heb dus een functie geschreven die systematisch de structuur langsloopt opzoek naar bijvoorbeeld 'productId'. Tijdens het langslopen van de tree, houdt hij in een string bij waar hij op dat moment zit. Op het moment dat de 'productId' gevonden is, heb ik dus in een string het juiste 'pad' staan naar die productId. Het pad is nu bijvoorbeeld:
PHP:
Nu zet ik in deze string 'name' om naar 'value', en dan heb ik altijd de waarde van de productId. Tenminste... ik heb het pad. Want als ik nu de waarde wil uitlezen door variable variables te gebruiken gebeurt er niks:1
| $productId = "xmlTree->children[2]->attributes[3]->name"; |
PHP:
Nu kom ik tot mijn vraag: hoe kan ik deze combinatie van objects en arrays in een string wèl uitlezen als variabele?
1
2
3
4
5
| $productId = "xmlTree->children[2]->attributes[3]->value"; $productId = $$productId; echo $productId; |
www.stevelock.nl