Desidero scrivere una funzione che analizzi una struttura di dati XML (teoricamente) sconosciuta in un array PHP equivalente.iterazione su struttura XML sconosciuta con PHP (DOM)
Ecco il mio XML di esempio:
<?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>
ho modificato questa funzione l'iterazione DOM da 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/>";
}
Ora, a causa del modo in cui sto passando gli elementi alla matrice I' m sovrascrivendo gli elementi che condividono il nome di un nodo (dal momento che preferisco dare alle chiavi lo stesso nome dei loro nodi di origine). La mia ricorsione non è eccezionale ... Tuttavia, anche se svuoto le parentesi, il secondo livello di nodi è ancora presente come valori sul primo livello (vedi il testo del nodo della descrizione).
Qualcuno ha qualche idea su come posso costruirlo meglio?
che funziona bene - problema risolto! – sunwukung