working simplexmlelement simplexml_load_string simplexml_load_file print not new error array php casting simplexml

php - simplexmlelement - Lanzamiento recursivo desde SimpleXMLObject a Array



xml to array php (4)

Necesito lanzar recursivamente un PHP SimpleXMLObject a una matriz. El problema es que cada elemento secundario también es un PHP SimpleXMLElement.

es posible?


Es posible. Esta es una función recursiva que imprime las etiquetas de los elementos principales y las etiquetas + contenidos de los elementos que no tienen más hijos. Puede modificarlo para construir una matriz:

foreach( $simpleXmlObject as $element ) { recurse( $element ); } function recurse( $parent ) { echo ''<'' . $parent->getName() . ''>'' . "/n"; foreach( $parent->children() as $child ) { if( count( $child->children() ) > 0 ) { recurse( $child ); } else { echo''<'' . $child->getName() . ''>''; echo iconv( ''UTF-8'', ''ISO-8859-1'', $child ); echo ''</'' . $child->getName() . ''>'' . "/n"; } } echo''</'' . $parent->getName() . ''>'' . "/n"; }


No probé esta, pero parece que lo hace:

function convertXmlObjToArr($obj, &$arr) { $children = $obj->children(); foreach ($children as $elementName => $node) { $nextIdx = count($arr); $arr[$nextIdx] = array(); $arr[$nextIdx][''@name''] = strtolower((string)$elementName); $arr[$nextIdx][''@attributes''] = array(); $attributes = $node->attributes(); foreach ($attributes as $attributeName => $attributeValue) { $attribName = strtolower(trim((string)$attributeName)); $attribVal = trim((string)$attributeValue); $arr[$nextIdx][''@attributes''][$attribName] = $attribVal; } $text = (string)$node; $text = trim($text); if (strlen($text) > 0) { $arr[$nextIdx][''@text''] = $text; } $arr[$nextIdx][''@children''] = array(); convertXmlObjToArr($node, $arr[$nextIdx][''@children'']); } return; }

Tomado de http://www.codingforums.com/showthread.php?t=87283


No veo el punto, ya que SimpleXMLObject puede ser amenazado como matrices de todos modos ...

Pero si realmente lo necesita, simplemente revise la respuesta de chassagnette en este hilo o esta publicación en un foro.


json_decode(json_encode((array) simplexml_load_string($obj)), 1);