Archief - XML: valideren met PHP.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

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:

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 {...
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.

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;
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...

SMa

Legacy Member
imo kun je beter zelf een xml-klasse schrijven als het om zo'n eenvoudige bestanden gaat
dat hoeft helemaal niet ingewikkeld te zijn voor die 5 tags (leg een vaste volgorde op)

frenzal

Legacy Member
blijkbaar kan simplexml niet valideren met een schema, misschien ander xml processor zoeken dat da wel kan?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan