note 109032 added to function.xml-parse-into-struct
| From: | andy at andynformatics dot de | 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