我有以下xml文件:
<File>
<Function name="for">
<Function name="if">
<Function name="if">
</Function>
</Function>
<Function name="else">
</Function>
</Function>
</File>
我正在使用php Simple xml解析器从该文件中获取所有函数并显示它们。我想得到的是这样的:
for{
if{
if{
}
}
else{
}
}
因此,要获得包含函数的所有节点是不够的,我还需要获取订单。
我创建了一个名为Function的类,它有一个函数列表:
class Function{
/**
* @var int
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="Function")
*/
private listFunctions;
现在每个函数都可以有嵌套函数。 我的解析如下:
$xml = simplexml_load_file('file.xml') or die("Error: Cannot create object");
$functions = array();
foreach ($xml->->File->children() as $f) {
// Iterate over <Function> tags under <File> tag (level-1 functions)
$function = new Function();
$function->setName($f['name']);
if(isset($f->Function)) {
foreach($f->children() as $cf){
//Iterate over level-2 functions
$cfunction = new Function();
$cfunction->setName($cf['name']);
$f->addListFunctions($cfunction);
}
}
$functions[] = $function;
}
如果我有两级嵌套函数,这个例子很有效,它将显示以下内容:
for{
if{
}
else{
}
}
但我不知道我有多少级别,所以我需要以通用方式完成。 我认为解决方案是使用递归函数,但我不习惯它,我不知道如何开始,或者即使它是正确的路径。
有什么想法吗?