Comunidad de diseño web y desarrollo en internet online

Ayuda: Alterar archivo XML usando PHP

Citar            
MensajeEscrito el 19 Sep 2007 03:54 pm
Hola.
Basicamente lo que necesito es con un formulario y PHP alterar el contenido de un archivo XML.
El XML es muy sencillo y tiene la siguiente forma

Código :

<cuentas>
   <cuenta nombre="Ariel" mail="[email protected]" />
   <cuenta nombre="Jose" mail="[email protected]" />
</cuentas>

Quisiera saber si hay alguna forma de hacerlo bien y fácil, ya que tengo un código hecho pero funciona mal, y aunque funcione bien me parece muy poco optimizado.

Alguna idea?
Saludos

Por PabloHdS

251 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Sep 2007 09:48 pm
puede usar las funciones de DOM , libXML simpleXML , son muy utiles, primero verifica que PHP tenga esos modulos instalados, creo que en PHP 5 ya vienen todos esos instalados.

Por jaimoco

299 de clabLevel



Genero:Masculino  

choya bay , mexico

safari
Citar            
MensajeEscrito el 20 Sep 2007 12:46 am
Aca encuentras mucha ayuda al respecto para que lo hagas con PHP:

http://www.php.net/manual/es/ref.xml.php

Chaop!

Por luchope

38 de clabLevel



Genero:Masculino  

Bogota Colombia

firefox
Citar            
MensajeEscrito el 20 Sep 2007 03:33 pm
Bueno, primero gracias por las sugerencias. Yo habia empezado a hacerlo con las funciones simplexml.
Y como no tengo mucho tiempo para terminarlo, no pude investigar mucho las otras funciones y modulos.

Asique, temporalmente tengo este código funcionando, y cuando tenga mas tiempo veo de optimizarlo.
Lo posteo para el que le interese y acepto sugerencias para mejorarlo :)

Código :

$file = "cuentas.xml";
$action = $_POST["action"];
$id = $_POST["id"];

if(is_writable($file)){
   $xml = simplexml_load_file($file);
   $num = 1;
   $write = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
   $write .= "<cuentas>\n";
   foreach($xml as $item){
      if($num != $id){
         $write .= "   <cuenta nombre=\"{$item["nombre"]}\" mail=\"{$item["mail"]}\" />\n";
      }
      $num++;
   }
   if($action == "insert"){
      $write .= "   <cuenta nombre=\"{$_POST["a_nombre"]}\" mail=\"{$_POST["a_mail"]}\" />\n";
   }
   $write .= "</cuentas>";

   $open = fopen($file, "w+");
   if(fwrite($open, $write) === FALSE){
      die("No se puede escribir");
      exit;
   }
   fclose($open);
}


El código funciona para agregar y borrar nodos, no para modificar.

Por PabloHdS

251 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Sep 2007 07:16 pm
Lo puedes hacer de la siguiente manera:

Código :

$file = "cuentas.xml";
$action = $_POST["action"];
$id = $_POST["id"]; 

if(is_writable($file)){
   $xml = simplexml_load_file($file);
   $num = 1;
   $write = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
   $write .= "<cuentas>\n";
   $flag2=0;
   foreach($xml as $item){
   $flag=0;
     // if($num != $id){
   if($item['nombre'] == $_POST["a_nombre"]) {$write .= "   <cuenta nombre=\"{$_POST["a_nombre"]}\" mail=\"{$_POST["a_mail"]}\" />\n"; $flag=1; $flag2=1; }

      if($flag==0)  $write .= "   <cuenta nombre=\"{$item["nombre"]}\" mail=\"{$item["mail"]}\" />\n";
     // }
      $num++;
   }
   if(($action == "insert")&&($flag2==0)){
      $write .= "   <cuenta nombre=\"{$_POST["a_nombre"]}\" mail=\"{$_POST["a_mail"]}\" />\n";
   }
   $write .= "</cuentas>";

   $open = fopen($file, "w+");
   if(fwrite($open, $write) === FALSE){
      die("No se puede escribir");
      exit;
   }
   fclose($open);
}


Lo que hace es que al enviarle una nueva entrada, actualizará una que ya exista. Si no existe creará una nueva. Lo probé y funciona bien.Espero te sirva.

Chaop!

Por luchope

38 de clabLevel



Genero:Masculino  

Bogota Colombia

firefox
Citar            
MensajeEscrito el 01 May 2008 07:36 pm
El código funciona correctamente, pero me queda una duda.
Cual de las funciones sería la que borra algun contenido.
Hay un insert que debe venir del form en php que hace la captura, pero no veo ningun delete.

Por ejauregui

1 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Dic 2008 08:34 pm
yo intento hacer algo parecido pero porque obtengo este error?

Fatal error: Call to undefined function: simplexml_load_file() in /home/pagina/public_html/save_page1.php on line 17

Por lucasvm

16 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.