2011-01-20 2 views
13

Я XML-файловой test.xmlОбновление с PHP

<?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"; 
?> 

Я хочу обновить значения узлов, но приведенный выше код кажется неправильным. Может ли кто-нибудь помочь мне исправить это?

ОБНОВЛЕНИЕ: Мой вопрос несколько схож с этим Updating a XML file using PHP, но здесь я загружаю XML из внешнего файла, а также я обновляю элемент, а не атрибут. Вот где моя смута.

+0

, что не работает, как ожидалось? у вас нет объяснения ошибки. –

+0

Я хочу обновить значения узлов. Это не происходит. – ptamzz

+0

Я обновил свой вопрос выше. – ptamzz

ответ

28

Вы не получаете доступ к правильному узлу. В вашем примере $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'); 
+0

Спасибо, Джош :). Теперь он работает – ptamzz

+0

Что произойдет, если узел xName или yName еще не существует? – swl1020

+0

Что делать, если у вас есть несколько пользователей с несколькими именами yName и вы хотите редактировать их все сразу? Есть предположения? – user906379

3

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

+0

Я считаю, что переписывает все теги. Я хочу обновить только определенные узлы. – ptamzz

+1

Он делает, но не написав половину XML-интерпретационной логики в вашем собственном коде, чтобы писать только определенные узлы, я считаю, что вы дошли до SimpleXML. –

Смежные вопросы