使用php simple xml解析xml

时间:2016-06-29 12:29:28

标签: php xml simplexml

我有以下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{

    }
}

但我不知道我有多少级别,所以我需要以通用方式完成。 我认为解决方案是使用递归函数,但我不习惯它,我不知道如何开始,或者即使它是正确的路径。

有什么想法吗?

0 个答案:

没有答案