管理者がサーバーから特定のユーザーを禁止/禁止解除できるようにする Web インターフェイスを開発しています。そのソフトウェアは XML ファイルに依存してユーザーの禁止ステータスを決定します。当初、「Bans.xml」には次の内容が含まれています。
<Bans version="1.036">
<Nick>
<Ban>
<Overrideable enable="false"/>
<Nick>cray</Nick>
</Ban>
</Nick>
</Bans>
次の XML ファイルを取得するように php コードを作成するにはどうすればよいですか?
<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);
最後の質問は、特定の禁止を解除するにはどうすればよいかということです。ニックは、変数 $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');
こちらも回答いただけると嬉しいです(;_;)