我想寫一個函數來解析(理論上)未知的XML數據結構到等價的PHP數組中。用PHP(DOM)迭代未知的XML結構
這裏是我的示例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>
我修改從devarticles這個DOM遍歷功能:
$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/>";
}
現在,因爲這樣我傳遞的元素添加到陣列I」 m覆蓋共享一個節點名稱的任何元素(因爲我理想的是要給這些密鑰命名與它們的始發節點相同的名稱)。我的遞歸併不是很好......但是,即使我清空括號 - 第二層節點依然在值的第一層(請參閱說明節點的文本)。
任何人都有任何想法,我可以更好地構造這個?
我沒有做,早在經過陣列的方法,但我想弄清楚它爲什麼沒有看到這些二線節點。另外,如何繼續在未知深度的數組上添加最後一組空圓括號? – sunwukung 2009-06-16 23:43:22
我的意思是,你看過你的帖子中的劇本......這是一個野獸! – sunwukung 2009-06-16 23:45:41