martes, julio 29, 2008

XML & PHP con DOM

Me econtré con el asunto de leer y escribir archivos XML, investigué un poco y me econtré con varias formas. Por eso me pareció interesante publicar algo para la "postegridad".
Arrancamos..
Vamos a usar el siguiente archivo XML como ejemplo.



Hola Caracola
KaoS
Olla Kaitos a Luisete


Nuevo articulo en desarrolloweb
Raul
Jeje hola, aqui estamos


La forma que en mi caso me pareció la mejor, fue "meter" los datos en una matriz o array para luego usarlo
a gusto. Para mi comodidad hice una función:

function XML_a_Matriz($archivo_xml);

$noticias = $doc->getElementsByTagName( "bloque" );
foreach( $noticias as $noticia )
{
$titulos = $noticia->getElementsByTagName( "titulo" );
$titulo = $titulos->item(0)->nodeValue;

$autores = $noticia->getElementsByTagName( "autor" );
$autor = $autores->item(0)->nodeValue;

$cuerpos= $noticia->getElementsByTagName( "cuerpo" );
$cuerpo= $cuerpos->item(0)->nodeValue;

$noticias_array[] = array(
'titulo' => $noticia,
'autor' => $autor,
'cuerpo' => $cuerpo,
);
}
return $noticias_array;
}
?>
Podemos usar el array para poder agregar datos al XML.

include 'XMLaMatriz.php'
$noticias=XML_a_Matriz("noticias.xml");
$noticias[] = array(
'noticia' => 'PRUEBA1',
'autor' => 'Menganito',
'cuerpo' => 'LoQSea',
);
$doc = new DOMDocument();
$doc->formatOutput = true;

$r = $doc->createElement( "bloque" );
$doc->appendChild( $r );

foreach( $noticias as $noticia_w )
{
$b = $doc->createElement( "noticia" );

$titulo = $doc->createElement( "titulo" );
$titulo->appendChild(
$doc->createTextNode( $noticia_w['titulo'] )
);
$b->appendChild( $titulo );

$autor = $doc->createElement( "autor" );
$autor->appendChild(
$doc->createTextNode( $noticia_w['autor'] )
);
$b->appendChild( $autor );

$cuerpo = $doc->createElement( "cuerpo" );
$cuerpo->appendChild(
$doc->createTextNode( $noticia_w['cuerpo'] )
);
$b->appendChild( $cuerpo );

$r->appendChild( $b );
}

$doc->save("noticias.xml")
?>
Bueno creo que con este ejemplo da para hacer algo mas complejo. Seguiré leyendo.

No hay comentarios.: