note 109032 added to function.xml-parse-into-struct

From: Date: Thu, 14 Jun 2012 12:35:58 +0000
Subject: note 109032 added to function.xml-parse-into-struct
Groups: php.notes 
Request: Send a blank email to php-notes+get-188600@lists.php.net to get a copy of this message
To get out of an XML-Structure like this: <root><element><subelement attribute="value">some text</subelement></element><anotherelement>Hello World</anotherelement></root> something like this: Array ( [tag] => ROOT [0] => Array ( [tag] => ELEMENT [0] => Array ( [tag] => SUBELEMENT [attributes] => Array ( [ATTRIBUTE] => value ) [value] => some text ) ) [1] => Array ( [tag] => ANOTHERELEMENT [value] => Hello World ) ) I have written a short and pretty simple function: function xml2array($xml){ $opened = array(); $opened[1] = 0; $xml_parser = xml_parser_create(); xml_parse_into_struct($xml_parser, $xml, $xmlarray); $array = array_shift($xmlarray); unset($array["level"]); unset($array["type"]); $arrsize = sizeof($xmlarray); for($j=0;$j<$arrsize;$j++){ $val = $xmlarray[$j]; switch($val["type"]){ case "open": $opened[$val["level"]]=0; case "complete": $index = ""; for($i = 1; $i < ($val["level"]); $i++) $index .= "[" . $opened[$i] . "]"; $path = explode('][', substr($index, 1, -1)); $value = &$array; foreach($path as $segment) $value = &$value[$segment]; $value = $val; unset($value["level"]); unset($value["type"]); if($val["type"] == "complete") $opened[$val["level"]-1]++; break; case "close": $opened[$val["level"]-1]++; unset($opened[$val["level"]]); break; } } return $array; } ---- Server IP: 87.106.1.137 Probable Submitter: 91.10.101.166 ---- Manual Page -- http://www.php.net/manual/en/function.xml-parse-into-struct.php Edit -- https://master.php.net/note/edit/109032 Del: integrated -- https://master.php.net/note/delete/109032/integrated Del: useless -- https://master.php.net/note/delete/109032/useless Del: bad code -- https://master.php.net/note/delete/109032/bad+code Del: spam -- https://master.php.net/note/delete/109032/spam Del: non-english -- https://master.php.net/note/delete/109032/non-english Del: in docs -- https://master.php.net/note/delete/109032/in+docs Del: other reasons-- https://master.php.net/note/delete/109032 Reject -- https://master.php.net/note/reject/109032 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#188600) next »