2011-01-20 15 views
13

mam pliku XML test.xmlAktualizacja węzeł XML z 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> 

Próbuję zaktualizować XName węzła & yName używając PHP na złożenie formularza. Tak, załadowałem plik za pomocą simplexml_load_file(). Kod działania formularza PHP jest poniżej

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

Chcę zaktualizować wartości węzłów, ale powyższy kod wydaje się być nieprawidłowy. Czy ktoś może mi pomóc to naprawić?

AKTUALIZACJA: Moje pytanie jest nieco podobne do tego Updating a XML file using PHP, ale tutaj ładuję plik XML z zewnętrznego pliku, a także aktualizuję element, a nie atrybut. Tam właśnie leży moje zamieszanie.

+0

co nie działa jak powinno? nie masz wyjaśnienia błędu. –

+0

Chcę zaktualizować wartości węzłów. To się nie dzieje. – ptamzz

+0

Zaktualizowałem moje pytanie powyżej. – ptamzz

Odpowiedz

28

Nie masz dostępu do odpowiedniego węzła. W twoim przykładzie $xml przechowuje węzeł główny <info/>. Oto świetna wskazówka: zawsze wymieniaj zmienną, która zawiera dokument XML po węźle głównym, zapobiegnie to dezorientacji.

Ponadto, jak wskazał Ward Muylaert, trzeba zapisać plik.

Oto poprawiony przykład:

// 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

Dziękuję Josh :). Działa teraz – ptamzz

+0

Co się stanie, jeśli węzeł xName lub yName jeszcze nie istnieje? – swl1020

+0

Co zrobić, jeśli masz kilku użytkowników z kilkoma yName i chcesz edytować wszystkie naraz? jakieś pomysły? – user906379

3

Musisz zapisać zmiany z powrotem do pliku, użyj metody SimpleXMLElement za pomocą metody asXML.

+0

Wierzę, że przepisuje całe tagi. Chcę zaktualizować tylko określone węzły. – ptamzz

+1

To prawda, ale brakuje w nim połowy logiki interpretacji XML w twoim własnym kodzie, aby pisać tylko określone węzły. Sądzę, że jest to tak daleko, jak w przypadku SimpleXML. –