2011-01-20 15 views
13

Tengo una test.xml archivo XMLcon 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> 

Estoy tratando de actualizar el nodo xName & yname usando PHP en un envío del formulario. Por lo tanto, he cargado el archivo usando simplexml_load_file(). El código de acción de formulario PHP está por debajo de

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

Quiero actualizar los valores del nodo, pero el código anterior parece ser incorrecto. ¿Alguien puede ayudarme a rectificarlo?

ACTUALIZACIÓN: Mi pregunta es algo similar a esta Updating a XML file using PHP pero aquí, estoy cargando el XML desde un archivo externo y también estoy actualizando un elemento, no un atributo. Ahí es donde reside mi confusión.

+0

lo que no funciona como se esperaba? usted no tiene un error explicado –

+0

Quiero actualizar los valores del nodo. No está sucediendo – ptamzz

+0

He actualizado mi pregunta anterior. – ptamzz

Respuesta

28

No está accediendo al nodo derecho. En su ejemplo, $xml contiene el nodo raíz <info/>. Aquí hay un gran consejo: siempre nombre la variable que contiene su documento XML después de su nodo raíz, evitará dicha confusión.

Además, como señaló Ward Muylaert, debe guardar el archivo.

Aquí está el ejemplo corregido:

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

Gracias Josh :). Está funcionando ahora – ptamzz

+0

¿Qué pasará si el nodo xName o yName aún no existe? – swl1020

+0

¿Qué sucede si tiene varios usuarios con varios yName y desea editarlos todos a la vez? ¿Alguna idea? – user906379

3

Tiene que volver a escribir los cambios en el archivo, utilice el método asXML de SimpleXMLElement.

+0

Creo que reescribe las etiquetas completas. Quiero actualizar solo nodos específicos. – ptamzz

+1

Sí, pero sin escribir la mitad de la lógica de interpretación XML en su propio código para escribir solo nodos específicos, creo que eso es todo lo que obtendrá con SimpleXML. –