Я разрабатываю веб-интерфейс, который позволяет администраторам блокировать / снимать запрет на отдельных пользователей с моего сервера, чье программное обеспечение зависит от файла 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);
Мой последний вопрос: как мне удалитьконкретный бан, где ник равен предоставленной пользователем строке, хранящейся в переменной $ 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');
Был бы рад, если бы на этот вопрос также можно было ответить;)