gpt4 book ai didi

php - 将节点添加到XML树的更深层分支中

转载 作者:行者123 更新时间:2023-12-03 16:21:58 25 4
gpt4 key购买 nike

我正在开发一个Web界面,该界面使管理员可以从我的服务器上禁止/取消禁止特定用户,该服务器的软件依赖于XML文件来确定用户的禁止状态。最初,“ Bans.xml”具有以下内容。

    <Bans version="1.036">
<Nick>
<Ban>
<Overrideable enable="false"/>
<Nick>cray</Nick>
</Ban>
</Nick>
</Bans>


如何编写php代码,以便获得以下XML文件?

    <Bans version="1.036">
<Nick>
<Ban>
<Overrideable enable="false"/>
<Nick>cray</Nick>
</Ban>
<Ban>
<Overrideable enable="false"/>
<Nick>newuser</Nick>
</Ban>
</Nick>
</Bans>


到目前为止,我已经设法编写了以下脚本:

    <?php
$xml=new DOMDocument();
$xml->formatOutput=true;
$xml->preserveWhiteSpace=false;
$xml->load("Bans.xml");
$root=$xml->documentElement;
$fnode=$root->firstChild;
$ori=$fnode->childNodes->item(2);
$nick=$xml->createElement("Nick");
$nickText=$xml->createTextNode("newuser");
$nick->appendChild($nickText);
$ban=$xml->createElement("Ban");
$ban->appendChild($nick);
$root->insertBefore($ban,$ori);
header("Content-type:text/xml");
$xml->save('Bans.xml');
?>


但是上面的代码给我的是:

    <Bans version="1.036">
<Nick>
<Ban>
<Overrideable enable="false"/>
<Nick>cray</Nick>
</Ban>
</Nick>
<Ban>
<Nick>Crayaas</Nick>
</Ban>
</Bans>


--------我设法通过替换来正确添加节点; ---------

    $root->insertBefore($ban,$ori);


用下面的代码;

    $fnode->insertBefore($ban,$ori);


我的最后一个问题是,如何删除特定的禁令,其中nick等于存储在变量$ buser中的用户提供的字符串。我用下面的代码。但是在这种情况下使用$ buser会产生错误。

    $buser="newuser";                
$dom=new DOMDocument();
$dom->load('settings/Bans.xml');
$bans=$dom->documentElement;
$xpath=new DOMXpath($dom);
$result=$xpath->query('/Bans/Nick/Ban[Nick="$buser"]');
$result->item(0)->parentNode->removeChild($result->item(0));
header("Content-type: text/xml");
$dom->save('settings/Bans.xml');


如果也能回答这个问题将很高兴;)

最佳答案

这个:

$root->insertBefore($ban,$ori);


应该:

$fnode->insertBefore($ban,$ori);


毕竟, <Nick>不是根节点,而是它的第一个子节点

关于php - 将节点添加到XML树的更深层分支中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6752605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com