Bram
Legacy Member
Voor de allereerste keer bezig met wat xml en php. Ik ben namelijk bezig aan een projectje waarbij verschillende mensen xml bestanden moeten kunnen toevoegen aan het project, die dan ingelezen worden in de backend.
Een voorbeeld van een xml bestand is:
Nu wil ik echter in m'n backend een systeem dat eerst en vooral nakijkt of de <module> tag aanwezig is. Ik gebruik momenteel php5's SimpleXML, misschien ligt het hem gewoon daaraan, want
werkt niet, die blijft sowieso leeg, of er nu een <module> tag is of niet...
Is dit nog op te lossen met simpleXML, of zal ik toch SAX of zelfs DOM parsers moeten gebruiken? Ik had eerst gedacht om een dtd te schrijven, maar aangezien de php parsers non validating zijn en ik geen Java ken om zelf een te schrijven, valt die optie ook weg.
edit: net op nog een probleem gestoten... in m'n voorbeeld gebruik ik <position> om de plaats in de array te bepalen.
Deze geeft echter een Illegal offset type error aangezien $key geen waarde is (ook al echo't $key als 1), maar een SimpleXMLElement Object is. Print_r($key) geeft namelijk SimpleXMLElement Object ( [0] => 1 ). Hoe haal ik die waarde 1 daar nu uit? Ik dacht gewoon met $key = $key[0], maar zo eenvoudig mocht het niet zijn...
Een voorbeeld van een xml bestand is:
Code:
<?xml version="1.0"?>
<module>
<name>Dashboard</name>
<position>1</position>
<nav>Dashboard</nav>
<href>dashboard.php</href>
</module>
Nu wil ik echter in m'n backend een systeem dat eerst en vooral nakijkt of de <module> tag aanwezig is. Ik gebruik momenteel php5's SimpleXML, misschien ligt het hem gewoon daaraan, want
PHP:
$loadedFile = simplexml_load_file($file);
if(!empty($loadedFile->module)) {
//module gevonden
} else {...
Is dit nog op te lossen met simpleXML, of zal ik toch SAX of zelfs DOM parsers moeten gebruiken? Ik had eerst gedacht om een dtd te schrijven, maar aangezien de php parsers non validating zijn en ik geen Java ken om zelf een te schrijven, valt die optie ook weg.
edit: net op nog een probleem gestoten... in m'n voorbeeld gebruik ik <position> om de plaats in de array te bepalen.
PHP:
$key = !empty($loadedFile->position) ? $loadedFile->position : die("No position element found in $file\n");
$this->modules[$key]['name'] = $name;
$this->modules[$key]['href'] = $href;
$this->modules[$key]['subnav'] = $subnav;