Necesito lanzar recursivamente un SimpleXMLObject de PHP a una matriz. El problema es que cada elemento secundario también es un PHP SimpleXMLElement.Lanzamiento recursivo de SimpleXMLObject a Array
¿Esto es posible?
Necesito lanzar recursivamente un SimpleXMLObject de PHP a una matriz. El problema es que cada elemento secundario también es un PHP SimpleXMLElement.Lanzamiento recursivo de SimpleXMLObject a Array
¿Esto es posible?
json_decode(json_encode((array) simplexml_load_string($obj)), 1);
no probó éste, pero esto parece lograr que se haga:
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
esto no funcionó para mí –
No estoy seguro de cómo este "no funciona" para los demás, pero hace el trabajo de iteración a través de todos los niños y atributos. –
no lee CDATA – reggie
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. Es posible realizar cambios 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 veo desde el punto SimpleXMLObject puede threated al igual que las matrices de todos modos ...
Pero si realmente es necesario que, simplemente marque la respuesta de Chassagnette de en this thread o this post en un foro.
A excepción de la situación en la que desea almacenarlo en una sesión, obtener 'Serialización de' SimpleXMLElement 'no es permitido' cuando intento eso. Por lo tanto, fundir en matriz es útil –
@GromBeestje: XML ya está serializado. No hay problema para almacenar una cadena en una sesión :) – hakre
Analizar la cadena XML cada vez que se carga el script parece ineficiente, por lo tanto, creo que tiene sentido almacenar un formulario analizado. –
listo! Nunca hubiera pensado hacer eso. –
Te habría dado 100 votos ascendentes si es posible. Es simplemente increíble :) –
Inteligente pero legible, fácil de mantener y elegante. – Eddified