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");
我期望的输出如下所示。例如,我有四个变量:
- a/b/c/d
- a/b/c/e
- a/b/f
- g/h
那么 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>
我正在使用 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");
我期望的输出如下所示。例如,我有四个变量:
- a/b/c/d
- a/b/c/e
- a/b/f
- g/h
那么 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>