Indien je simpelweg een array van alle (xml) nodes wilt genereren moet het hiermee wel lukken, success:P
<?php
////////////////////////
////Frank van Asselt////
////////////////////////
////xml -> array 1.1////
////////////////////////
class xml{
public function generateArray($xml){
$dom = new DOMDocument;
$dom->load($xml);
return($this->_generateArray($dom->firstChild));
}
private function _generateArray($node){
$array = array();
//Indien er meerdere kinderen zijn
if($node->childNodes->length > 2){
foreach($node->childNodes as $child){
//Bepaal de kwantiteit van de tags van het kind
$nodeTags = $node->getElementsByTagName($child->nodeName);
$test = array();
foreach($nodeTags as $nodeTag){
if($nodeTag->parentNode->isSameNode($child->parentNode)){
array_push($test, $child->nodeName);
}
}
if(count($test) > 1){
if($child->nodeType != XML_TEXT_NODE){
//De tag van de kinderen komen meerdere malen voor (numeric)
if($child->childNodes->length > 2){
//De value is een array
$array[$node->nodeName][] = $this->_generateArray($child);
//print 'numeric: '.$node->nodeName.'<br />';
}
else{
//De value is geen array
$array[] = $child->nodeValue;
}
}
}
else{
if($child->nodeType != XML_TEXT_NODE){
//De tag van het kind komt 1 keer voor (assoc)
if($child->childNodes->length > 2){
//De value is een array
$array[$child->nodeName] = $this->_generateArray($child);
}
else{
//De value is geen array
$array[$child->nodeName] = $child->nodeValue;
Niet dat het nog wat uitmaakt voor de persoon die de vraag stelde...
Iets valt me toch op.
Ik heb het niet grondig bekeken, het is meer een eerste spontane reactie.
//Indien er meerdere kinderen zijn ...
Zou ik niet doen. Zelfs al krijg je maar 1 element, zou ik het mooi in een array zetten. Ik zou niet willen mijn hele php logica moeten aanpassen omdat er toevallig van een element maar 1 aanwezig is.
?
Onbekende gebruiker
30-12-2010 13:36
Kris Peeters op 30/12/2010 13:22:15
Niet dat het nog wat uitmaakt voor de persoon die de vraag stelde...
Iets valt me toch op.
Ik heb het niet grondig bekeken, het is meer een eerste spontane reactie.
//Indien er meerdere kinderen zijn ...
Zou ik niet doen. Zelfs al krijg je maar 1 element, zou ik het mooi in een array zetten. Ik zou niet willen mijn hele php logica moeten aanpassen omdat er toevallig van een element maar 1 aanwezig is.
Inderdaad, volgens mij is hij niet helemaal correct / logisch opgebouwd. En zoiets staat ook al op php.net:
[php]book.dom#93717[/php]