Miércoles, 08 Septiembre 2010
Funciones para manejar xml en php PDF Imprimir Email
Miércoles, 08 de Septiembre de 2010 17:39

He aquí unas funciones que me he hecho para manejarme con el xml (basadas en simplexml).

Leer xml: Sirve para leer un código xml de un fichero

{codecitation class="brush:php"}

<?php
function leer_xml($fichero){
//Comprobamos que existe el fichero
if (file_exists($fichero)) {
//Lo cargamos como objeto con simplexml
$dom = simplexml_load_file($fichero);
}
else{
echo 'Fallo al abrir '.$fichero.'<br/>';
$dom = -1;
}

if(!$dom) return -1;
return $dom;
}
?>

{/codecitation}

Una alternativa sería para leer xml desde una variable:

{codecitation class="brush:php"}

<?php
function leer_xml ( $xml ){
//Comprobamos que existe la variable
if ( $xml ) {
//Lo cargamos como objeto con simplexml
$dom = simplexml_load_string ( $xml );
}
else{
echo
'Fallo al leer el código<br/>' ;
$dom = - 1 ;
}

if(!
$dom ) return - 1 ;
return
$dom ;
}
?>

{/codecitation}

Función insertar_nodo: Añade un nodo/hijo a la estructura xml

{codecitation class="brush:php"}

<?php
function insertar_nodo ( $nodo , $datos , $fichero , $duplicar , $duplicados ){
//Leemos fichero
if(( $xml = leer_xml ( $fichero )) == - 1 ) return - 1 ;

//Comprobamos si puede haber nodos duplicados o no y si los hay
if( $duplicar == 0 ) $stop = buscar_nodo ( $nodo , $duplicados , $fichero );
else $stop = 0 ;

//Si no hay nodos duplicados o si puede haberlos, seguimos
if( $stop == 0 ){
//Guardamos todos los datos en un nuevo nodo
$tag = $xml -> addChild ( $nodo );
foreach( $datos as $valor ) $tag -> addChild ( $valor [ 'tag' ], $valor [ 'dato' ]);
//Guardamos el fichero
$xml -> asXML ( $fichero );
}

return 0 ;
}
?>

{/codecitation}

Buscar nodo: Busca dentro de los nodos de un xml

{codecitation class="brush:php"}

<?php
function buscar_nodo ( $nodo , $datos , $fichero , $case_sensitive ){

$encontrado = 0 ;
//Leemos el fichero
if(( $xml = leer_xml ( $fichero )) == - 1 ) return - 1 ;

//Comprobamos si es case sensitive
if(! $case_sensitive ) $case_sensitive = 0 ;
switch( $case_sensitive ){
case 0 :
//Recorremos los nodos
foreach( $xml -> $nodo as $tag )
foreach( $datos as $valor )
//Comparamos valor del nodo con el nuestro
if( strtolower ( $tag -> $valor [ 'tag' ]) == strtolower ( $valor [ 'dato' ])) $encontrado = 1 ;
break;
case 1 :
foreach( $xml -> $nodo as $tag )
foreach( $datos as $valor )
if( $tag -> $valor [ 'tag' ] == $valor [ 'dato' ]) $encontrado = 1 ;
break;
}

return $encontrado ;
}
?>

{/codecitation}

Modificar nodo: Modifica los valores de un nodo:

 

Leer más...
Actualizado ( Miércoles, 08 de Septiembre de 2010 17:53 )