Ik gebruik het volgende stukje code dat een directory uitleest:
Omdat ik geen mogelijkheid heb om ingebouwde DOM function o.i.d. te gebruiken heb ik mijn eigen XML class geschreven. Die gebruik ik nu dus om een XML boom te bouwen en daar de info in te stoppen. Lukt allemaal aardig, alleen krijgt de ContentNode "file" iedere keer dezelfde content; te weten de filenaam van het laatste bestand dat uitgelezen wordt.
Ik schat dat dat te maken heeft met referenties / geheugenadressen, maar snap niet precies wat ik moet doen om het op te lossen. Ik voeg de nodes alsvolgt toe:
met de & om het geheugenadres op te slaan (referentie dus). Hier gaat het fout, aangezien die referentie steeds lijkt te wijzen naar hetzelfde adres, alsof de "new" operatie helemaal geen nieuwe instantie aanmaakt, maar de vorige gebruikt. Ik kan dat natuurlijk vies oplossen door alles in een array met een tellertje te stoppen, maar dat is eigenlijk niet de bedoeling.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| function readDir() { $dirHandle = openDir($this->directory); // construct the files tag $filesNode = new XMLNode("files"); while (false !== ($file = readdir($dirHandle))) { if (($file != "..") && ($file != ".")) { $fileNode = new XMLNode("file"); $content = new XMLContentNode("filename",$file); $fileNode->appendChild($content); $filesNode->appendChild($fileNode); } } $this->XMLRoot->appendChild($filesNode); closedir($dirHandle); } |
Omdat ik geen mogelijkheid heb om ingebouwde DOM function o.i.d. te gebruiken heb ik mijn eigen XML class geschreven. Die gebruik ik nu dus om een XML boom te bouwen en daar de info in te stoppen. Lukt allemaal aardig, alleen krijgt de ContentNode "file" iedere keer dezelfde content; te weten de filenaam van het laatste bestand dat uitgelezen wordt.
Ik schat dat dat te maken heeft met referenties / geheugenadressen, maar snap niet precies wat ik moet doen om het op te lossen. Ik voeg de nodes alsvolgt toe:
PHP:
1
2
3
4
5
6
| /* apppendChild adds a child node to this element */ // takes a reference to $newChild because that could be altered later on function appendChild(&$newChild) { //TODO: typecheck? $this->children[] = &$newChild; } |
met de & om het geheugenadres op te slaan (referentie dus). Hier gaat het fout, aangezien die referentie steeds lijkt te wijzen naar hetzelfde adres, alsof de "new" operatie helemaal geen nieuwe instantie aanmaakt, maar de vorige gebruikt. Ik kan dat natuurlijk vies oplossen door alles in een array met een tellertje te stoppen, maar dat is eigenlijk niet de bedoeling.