PHP - "Duplicate" addchild 函数的值

PHP - "Duplicate" the value of the addchild function

我正在使用 PHP 和 SimpleXML。

有点难以解释,但我想知道如何才能做到以下几点。

我正在使用以下代码检查第一个父节点是否存在,如果不存在,我将创建该节点。

 if (!isset($xml->$serialize)){
    $set = $xml->addChild($serialize);
    }
$last = $set;

同样适用于其他检查的节点:

if (!isset($last->$serialize)){
    $set = $last->addChild($serialize);
}
$last = $set;

如果还没有创建整个路径,它工作得很好,但如果已经创建了一些节点,那么它就会出错并创建一个奇怪的路径。我知道为什么会这样,但我不知道该如何解决。

变量 $set 通过创建一个子节点获取其值,如果已经创建了子节点,则 "if" 中的代码不会 运行 并且 $set 不会获取值.即使已经有一个子节点,变量 $set 也能获取它的值,我该怎么做呢?或者我怎样才能 "duplicate" 你从 addchild 函数中得到的值?

编辑: 我使用以下代码调用 xml:

$xml = new SimpleXMLElement("<permissions></permissions>");

并在申请结束时保存:

$xml->saveXML("/home/atakan/PhpstormProjects/User_Permissions/test.xml");

我期望的输出如下所示。例如,我有四个变量:

那么 Xml- 输出应该像这样 picture。

您需要将字符串分解成单独的组件,然后一次添加一个。代码大部分都在那里,但是试图一次性添加它是行不通的。

我已经将它写成一个函数,您可以看到它是如何通过 explode 和 / 拆分输入的。然后它会检查每个级别,因为它会添加任何缺失的元素,或者它们是否存在 - 只需调整 $set 以指向结构中新的现有元素。

<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );

function addElement ( SimpleXMLElement $start, string $path )    {
    $parts = explode("/", $path);
    $set = $start;
    foreach ( $parts as $part ) {
        if ( !isset($set->$part) )  {
            $set = $set->addChild($part);
        }
        else    {
            $set = $set->$part;
        }
    }

}

$xml = new SimpleXMLElement("<permissions></permissions>");
addElement( $xml, "a/b/c/d" );
addElement( $xml, "a/b/c/e" );
addElement( $xml, "a/b/f" );
addElement( $xml, "g/h" );
echo $xml->saveXML();

回声...

<?xml version="1.0"?>
<permissions>
    <a>
        <b>
            <c>
                <d />
                <e />
            </c>
            <f />
        </b>
    </a>
    <g>
        <h />
    </g>
</permissions>