我正在開發一個Web界面,使管理員可以禁止/取消特定用戶從我的服務器(其軟件依賴於XML文件)來確定用戶的禁止狀態。最初,'Bans.xml'具有以下內容。將節點添加到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');
會很高興,如果這能回答爲好;)
我還有一個疑問。我如何添加元素; –
Cray
順便說一句,多謝隊友。你的回答確實有助於解決我的問題。 – Cray
'$ override = $ xml-> createElement(「Overrideable」); $ override-> setAttribute('enabled','false'); $ ban-> appendChild($ override);' – Wrikken