我的目标是:首先,在XML文件中查找特定的密钥。其次,返回密钥的父级。在下面的代码示例中,键是文件名。
代码:
<?php
$inputXML = simplexml_load_file("data.xml");
$myProject = lookupProject($inputXML, "file1");
echo $myProject->projectname; //print the name of the project containing <filename>"file1"</filename>
echo "\n";
/*
Goal: return the <project> that is the parent of <filename>$input_filename</filename>
Assume: a <filename> appears in at most one <project> subtree.
*/
function lookupProject($myXML, $input_filename)
{
foreach($myXML->project as $curr_project) //notice I don't mention the root <projects></projects>
{
foreach($curr_project->filename as $curr_filename)
{
if ($curr_filename == $input_filename)
{
return $curr_project;
}
}
}
return null; //if not found, return null
}
?>
示例数据文件data.xml
<projects>
<project>
<projectname>project1</projectname>
<filename>file1</filename>
<filename>file2</filename>
</project>
<project>
<projectname>project2</projectname>
<filename>file3</filename>
</project>
</projects>
如果我们有一个更复杂的XML结构,包含多个子树级别,找到file1的父级可能需要大量的foreach()循环。是否有一个SimpleXML命令可以抽象出lookupProject中出现的循环?
tl; dr是否有一个实现lookupProject()的短/优雅(单行?)解决方案?
请注意,这是homework,但上述问题根本不是家庭作业问题的症结所在。我完成了家庭作业,但知道上述问题的答案将有助于我使我的解决方案更加优雅。