У меня XML-файл test.xml
<?xml version="1.0"?> <info> <user> <name> <firstname>FirstName</firstname> <lastname>Last Name</lastname> <nameCoordinate> <xName>125</xName> <yName>20</yName> </nameCoordinate> </name> </user> </info>
Я пытаюсь обновить узел xName & yName с помощью PHP при отправке формы. Итак, я загрузил файл с помощью simplexml_load_file (). Код действия формы PHP ниже
<?php $xPostName = $_POST['xName']; $yPostName = $_POST['yName']; //load xml file to edit $xml = simplexml_load_file('test.xml'); $xml->info->user->name->nameCoordinate->xName = $xPostName; $xml->info->user->name->nameCoordinate->yName = $yPostName; echo "done"; ?>
Я хочу обновить значения узлов, но приведенный выше код кажется неправильным. Может ли кто-нибудь помочь мне исправить это?
UPDATE: Мой вопрос несколько похож на это Обновление XML-файла с использованием PHP, но здесь я загружаю XML из внешнего файла, а также обновляю элемент, а не атрибут. Вот где моя смута.
Вы не получаете доступ к правильному узлу. В вашем примере $xml
содержит корневой узел <info/>
. Вот отличный совет: всегда называйте переменную, которая хранит ваш XML-документ после его корневого узла , это предотвратит такую путаницу.
Кроме того, как указал Уорд Муйлаерт, вам нужно сохранить файл.
Вот исправленный пример:
// load the document // the root node is <info/> so we load it into $info $info = simplexml_load_file('test.xml'); // update $info->user->name->nameCoordinate->xName = $xPostName; $info->user->name->nameCoordinate->yName = $yPostName; // save the updated document $info->asXML('test.xml');
Вы должны записать изменения в файл, используйте метод asXML для SimpleXMLElement.