Chcę napisać funkcję, która analizuje (teoretycznie) nieznaną strukturę danych XML w równoważnej tablicy PHP.iteracja nad nieznaną strukturą XML z PHP (DOM)
Oto mój przykładowy XML:
<?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>
zmodyfikowałem ten DOM iteracji funkcji z 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/>";
}
Teraz, ze względu na sposób olewam elementów do tablicy I” m nadpisywanie dowolnych elementów, które współdzielą nazwę węzła (ponieważ najlepiej chcę nadać kluczom te same nazwy, co ich węzły początkowe). Moja rekursja nie jest wspaniała ... Jednak nawet jeśli opróżnię nawiasy klamrowe - druga warstwa węzłów nadal będzie w postaci wartości na pierwszej warstwie (zobacz tekst węzła opisu).
Ktoś ma jakieś pomysły, jak mogę to lepiej skonstruować?
który działa na leczeniu - problem rozwiązany! – sunwukung