Обновление XML-узла с помощью PHP - PullRequest
13 голосов
/ 20 января 2011

У меня есть 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 из внешнего файла, а также обновляю элемент, а не атрибут. Вот где мое замешательство.

Ответы [ 2 ]

30 голосов
/ 20 января 2011

У вас нет доступа к нужному узлу.В вашем примере $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');
3 голосов
/ 20 января 2011

Вы должны записать изменения обратно в файл, используйте asXML метод SimpleXMLElement.

...