Quiero escribir una función que analiza una estructura de datos XML desconocida (teóricamente) en una matriz PHP equivalente.iterando sobre una estructura XML desconocida con PHP (DOM)
Aquí es mi XML de ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<content>
<title>Sample Text</title>
<introduction>
<paragraph>This is some rudimentary text</paragraph>
</introduction>
<description>
<paragraph>Here is some more text</paragraph>
<paragraph>Even MORE text</paragraph>
<sub_section>
<sub_para>This is a smaller, sub paragraph</sub_para>
<sub_para>This is another smaller, sub paragraph</sub_para>
</sub_section>
</description>
</content>
he modificado esta función la iteración de DOM devarticles:
$data = 'path/to/xmldoc.xml';
$xmlDoc = new DOMDocument(); #create a DOM element
$xmlDoc->load($data); #load data into the element
$xmlRoot = $xmlDoc->firstChild; #establish root
function xml2array($node)
{
if ($node->hasChildNodes())
{
$subNodes = $node->childNodes;
foreach ($subNodes as $subNode)
{
#filter node types
if (($subNode->nodeType != 3) || (($subNode->nodeType == 3)))
{
$arraydata[$subNode->nodeName]=$subNode->nodeValue;
}
xml2array($subNode);
}
}
return $arraydata;
}
//The getNodesInfo function call
$xmlarray = xml2array($xmlRoot);
// print the output - with a little bit of formatting for ease of use...
foreach($xmlarray as $xkey)
{
echo"$xkey<br/><br/>";
}
Ahora, debido a la forma en que estoy pasando los elementos de la matriz I' Sobreescribir cualquier elemento que comparta un nombre de nodo (ya que idealmente quiero darles a las claves los mismos nombres que sus nodos de origen). Mi recursión no es buena ... Sin embargo, incluso si vacío los corchetes, el segundo nivel de nodos sigue apareciendo como con los valores en el primer nivel (consulte el texto del nodo de descripción).
¿Alguien tiene alguna idea de cómo puedo construir mejor esto?
que funciona bien: ¡problema resuelto! – sunwukung