Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/12/2009, 12:02
antoniuskas
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 14 años, 10 meses
Puntos: 0
Modificar XML desde php

Resuelto, funciona, pero no me gusta demasiado el desarrollo. Si se puede depurar algo me gustaría, pues he visto que hay muchas personas que preguntan por cosas parecidas a esto, pongo en negrita lo que no me gusta
Yo lo he podido resolver con la mezcla de un montón de consultas por el foro y por ahí. Así que gracias a todos.
Este fichero xml es procesado en flash y muestra las noticias con movimiento, de arriba abajo, también se pueden poner enlaces, etc. A mi me ha sido muy útil.

Tengo un fichero xml con noticias que proceso desde un flash, El fichero se llama noticas1.xml

Código:
<noticias>
<grupo fecha="las 10 hoy no ha podido ser " nombre="viste te " explica="y lo verás"/>
<grupo fecha="febrero " nombre="toma moreno " explica="A pedir de boca"/>
<grupo fecha="marzo " nombre="El mejor  " explica="ayyyyy"/>
<grupo fecha="abril " nombre="lunes " explica="Te informaremos"/>
<grupo fecha="mayo " nombre="Fiestas " explica="Jamones y embutido"/>
<grupo fecha="junio " nombre="Concursos " explica="come máx"/>
<grupo fecha="julio " nombre="sippppp " explica="hardoón"/>
</noticias>
Lo que necesito es poder editar las noticias desde un formulario y que se puedan cambiar y volver a grabar en el xml.
Este primer fichero lo que hace es introducir los valores de los campos del fichero xml en un formulario dinámico donde los nombres de los campos son dato0, dato1,etc
Código:
<?
$fichero = 'noticias1.xml';

$xml = simplexml_load_file($fichero) or die ('Unable to load XML file!');

echo '<form id="form1" name="form1" method="post" action="proceso3.php">';
for ($i=0;$i<7;$i++) // codigo no depurado, debería saber que hay 7 noticias, 
{
	echo "<br>fecha"; 
	echo '<input type="text" name="dato'.($i*3+0).'" id="fech"  value="'.$xml->grupo[$i]['fecha'].   '" />';
	echo '<input type="text" name="dato'.($i*3+1).'" id="fech"  value="'.$xml->grupo[$i]['nombre'].  '" />';
	echo '<input type="text" name="dato'.($i*3+2).'" id="fech"  value="'.$xml->grupo[$i]['explica']. '" />';
 }
   echo '<input type="submit" name="Enviar" id="Enviar" value="Enviar" />';
echo "</form>";

?>
Luego al darle al botón enviar, se llama al fichero proceso3.php que es el siguiente:
Código:
<?
$archivo = "datos.xml"; // grabo en otro archivo en vez de noticias1.xml, por si las moscas
if ($id = fopen ($archivo, "w+"))
{ 
	$i=1;
	// grabamos la cabecera
	fputs($id,"<noticias>\n"); /mirar arriba el original 
	foreach($_POST as $nombre_campo => $valor)
	{ 
		if($nombre_campo!="Enviar") // el campo enviar no se graba
		{     // las siguientes van grabando los codigos necesarios para el xml
                       // es un poco de lio, seguro que se puede hacer más legible
			if ($i%3 == 1)
			fputs($id,"<grupo fecha=\"");	
			if ($i%3 == 2)
			fputs($id," \" nombre=\"");
			if ($i%3 == 0)
			fputs($id," \" explica=\"");
                         //la siguiente graba el valor del campo del formulario
				$asignacion = $valor;
				fputs ($id, $asignacion);
			if ($i%3 == 0)
				fputs ($id,"\"/>\n");
			$i++;
		}
	}
	fputs($id,"</noticias>");
}
else
	echo "no puedo";
fclose ($id) 
?>

Última edición por antoniuskas; 28/12/2009 a las 13:00 Razón: Resuelto