Nic*_*ard 4 php xml simplexml nodes
我有一个函数,它使用simplexml返回XML文件中的第一级节点,并将其写入无序列表:
function printAssetMap() {
$xml = simplexml_load_file(X_ASSETS);
$assets = $xml->asset;
$html = '<ul>'."\n";
foreach ($assets as $asset) {
$html .= '<li id="asset'.$asset->asset_assetid.'"><ins> </ins><a href="#">'.$asset->asset_name.' ['.$asset->asset_assetid.']</a></li>'."\n";
}//end foreach
$html .= '</ul>'."\n";
return $html;
}// printAssetMap()
Run Code Online (Sandbox Code Playgroud)
我正在使用的XML,它有嵌套节点:
<?xml version="1.0"?>
<assets>
<asset>
<asset_name>Home</asset_name>
<asset_url>/home</asset_url>
<asset_assetid>1</asset_assetid>
</asset>
<asset>
<asset_name>Projects</asset_name>
<asset_url>/projects</asset_url>
<asset_assetid>2</asset_assetid>
<asset>
<asset_name>Portfolio</asset_name>
<asset_url>/projects/portfolio</asset_url>
<asset_assetid>3</asset_assetid>
</asset>
<asset>
<asset_name>Current Jobs</asset_name>
<asset_url>/projects/current-jobs</asset_url>
<asset_assetid>4</asset_assetid>
</asset>
</asset>
</assets>
Run Code Online (Sandbox Code Playgroud)
现在,我开始添加我当前返回的节点的子节点.有没有办法循环遍历xml文件中所有级别的子节点,即使我不知道有多少级别,并将它们添加到我的列表中?
所以基本上你需要做的是一个函数,它接受<asset/>当前节点的每个子节点,构建HTML,然后检查当前节点是否有<asset/>自己的子节点,并在树中更深层递归.
这是你如何做到的:
function printAssetMap()
{
return printAssets(simplexml_load_file(X_ASSETS));
}
function printAssets(SimpleXMLElement $parent)
{
$html = "<ul>\n";
foreach ($parent->asset as $asset)
{
$html .= printAsset($asset);
}
$html .= "</ul>\n";
return $html;
}
function printAsset(SimpleXMLElement $asset)
{
$html = '<li id="asset'.$asset->asset_assetid.'"><ins> </ins><a href="#">'.$asset->asset_name.' ['.$asset->asset_assetid.']</a>';
if (isset($asset->asset))
{
// has <asset/> children
$html .= printAssets($asset);
}
$html .= "</li>\n";
return $html;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我希望一个名为"printX"的函数实际打印或回显一些东西,而不是返回它.也许您应该将这些函数命名为"buildX"?