Моя цель: во-первых, найти определенный ключ в файле 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 ()?
Обратите внимание, что это домашняя работа , но вопрос вышеэто вовсе не суть проблемы с домашним заданием.Я выполнил домашнее задание, но знание ответа на поставленный выше вопрос помогло бы мне сделать свое решение более элегантным.