Foros del Web » Programando para Internet » PHP »

php + xml

Estas en el tema de php + xml en el foro de PHP en Foros del Web. Hola gente Tengo un problemilla... Bueno, la verdad es que ya me queda poca cordura tras pelear con un código tan tonto y no lograrnada ...
  #1 (permalink)  
Antiguo 11/02/2005, 15:38
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 13 años, 9 meses
Puntos: 63
php + xml

Hola gente

Tengo un problemilla...

Bueno, la verdad es que ya me queda poca cordura tras pelear con un código tan tonto y no lograrnada de el salvo una solapada risa que llevo escuchando desde esta tarde.

Aquí les dejo el código problemático y a continuación hago el planteamiento de mi duda...

Código:
<?php echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<?php

$documento = file("documentillo.xml");
$manejador = xml_parser_create();
function apertura ($manejador, $nombres, $atributos) {
echo "hola";
}
function cierre ($manejador, $elemento) {
// aun pendiente de terminar... muuuy pendiente
echo "cierre";
}


xml_set_element_handler($manejador, 'apertura', "cierre");
xml_parser_set_option($manejador, XML_OPTION_CASE_FOLDING, false);

xml_parser_free($manejador);



?>
</body>
</html>
Como han podido ver, es un sencillo código cuya función será extraer información de un documento xml, por cierto, les pongo el documento o un extracto del mismo.

Código:
<?xml version="1.0" encoding="iso-8859-1"?>
<generalidad>
	<cosa tipo="uno" numero="1" />
	<cosa tipo="dos" numero="2" />
</generalidad>
Pues el detalle es que no logro «entrar» en la función «apertura». Es decir, no es que no logre procesar el xml, es que no logro ni imprimir algo, por lo que supongo que no he logrado entrar en la función en si.

Es muy probable que les resulte muy tonta mi consulta, pero les agradeceré cualquier idea al igual que cualquier buen recurso para aprender un poco más del procesamiento de documentos xml con php.

He conseguido algunas cosas, pero más bien poco...

Bueno, los dejo por ahora, pero estaré pendientes de sus consejos.

Gracias por el tiempo y las molestias.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #2 (permalink)  
Antiguo 13/02/2005, 17:48
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 13 años, 9 meses
Puntos: 63
Hola gente

solo revivía el mensaje por si quedó muerto en el fin de semana.

Felicidad
__________________
¡ hey, hou, hou, hey !
  #3 (permalink)  
Antiguo 13/02/2005, 19:51
Avatar de Durgeoble  
Fecha de Ingreso: marzo-2003
Mensajes: 462
Antigüedad: 14 años, 8 meses
Puntos: 2
por lo que veo la funcion la defines con varios parametros pero en ningun momento se ve que la llames ¿has probado a llamarla
Código PHP:
apertura ($parametro1,$parametro2,$parametro3); 
parametro 1,2 y 3 dependeran de como hayas definido la funcion de modo que sirvan para algo o, para nada, por otro lado si quieres usar xml_set_element_handler($manejador, 'apertura', "cierre");
lo estas haciendo mal seria
Código PHP:
xml_set_element_handler($manejador$apertura(parametros), $cierre(parametros)); 
Deberias empollarte un poco mas la teoria
__________________
Todas mis respuestas funcionaran correctamente en aquellos navegadores que respeten los estandares.
  #4 (permalink)  
Antiguo 14/02/2005, 04:03
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 13 años, 9 meses
Puntos: 63
Perfecto, ahora mismo hago las pruebas y leeré más...

Gracias

Felicidad
__________________
¡ hey, hou, hou, hey !
  #5 (permalink)  
Antiguo 14/02/2005, 04:15
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 13 años, 9 meses
Puntos: 63
Me surge una duda...

Según puedeo ver en los ejemplos de esta página.

CUando uso el: xml_set_element_handler, los parámetros han de ser: el parser y dos strings, (cadenas), que serán las llamadas a las funciones que trabajarán.

Luego las funciones que trabajarán con los elementos de apertura y cierre, ya tienen predefinidos los argumentos, la primera 3 y la segunda 2, solo he de hacer algo con ellos.

Aquí está la definición del xml_set_element_handler.

Sin embargo, en uno de los comentarios de los usuarios, usan en efecto, un array en la llamada.

La verdad es que debo estar más torpe de lo normal, porque aun no veo claro como hacerlo y menos aun veo como hacer para procesar los atributos de las etiquetas xml que es, a fin de cuentas, lo que quiero hacer.

Disculpen mi torpeza... y falta de práctica

Felicidad
__________________
¡ hey, hou, hou, hey !
  #6 (permalink)  
Antiguo 14/02/2005, 08:34
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 13 años
Puntos: 7
Hola, el código que enviaste no tiene porque hacer nada, puesto que no recorres el documento XML y es obvio que no se van a ejecutar "apertura" ni "cierre".
El código sería más o menos así:
Código PHP:
<?php echo '<?xml version="1.0" encoding="iso-8859-1"?>'."\n";?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<?php
    $documento 
file("data.xml");
    
$manejador xml_parser_create();
    function 
apertura ($manejador$nombres$atributos) {
    echo 
"hola";
    }
    function 
cierre ($manejador$elemento) {
    
// aun pendiente de terminar... muuuy pendiente
    
echo "cierre";
    }
    
xml_set_element_handler($manejador'apertura''cierre');
    
xml_parser_set_option($manejadorXML_OPTION_CASE_FOLDINGfalse);
    
    foreach (
$documento as $linea) { 
   if (!
xml_parse($manejador$linea)) { 
       die(
sprintf('<br /><span style="color:#f00;">Error al interpretar: %s en la línea %d</span>'
                   
xml_error_string(xml_get_error_code($manejador)), 
                   
xml_get_current_line_number($manejador))); 
   } 
    }
    
xml_parser_free($manejador);
?>
</body>
</html>
__________________
Alex Concha
Buayacorp - Programación y Diseño

Última edición por xknown; 14/02/2005 a las 08:37
  #7 (permalink)  
Antiguo 14/02/2005, 10:28
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 13 años, 9 meses
Puntos: 63
Hola

Ok, ya veo...

ajá...

disculpen, es que mientras empecé a escribir el correo de agradecimiento, estaba haciendo las pruebas y entendiendo la salida.

Agregué un <br /> para mayor claridad en la salida tras el "hola" y el "cierre".

La salida que me generaba es esta:

hola
hola
cierre
hola
cierre
cierre

Y debo reconocer que me desconcertó un poco, no entendía las cosas, pero tras unos minutos, abrir la ventana para airearme y un par de colisiones con las paredes de un pasillo, lo pillé...

:)

si las reagrupamos es más claro...

hola

hola
cierre

hola
cierre

cierre


Luego veo que mi fallo es que no procesaba el documento, tal y como me indica xknown.

Ahora bien, veo que el foreach no hace nada realmente, es decir, el if dentro dentro del foreach me daría información sobre un error, pero el foreach e nsi mismo no hace mucho más que leer el documento linea por línea (que ya es bastante).

Y si no me equivoco, el xml_set_element_handler parece estar «escuchando» o «pendiente» y cada vez que en el foreach aparece una línea correspondiente a la apertura o cierre de una etiqueta, procede a llamar a la función encargada.

Bueno, espero que mi interpretación no sea muy erronea o que no me haya explicado muy mal.

Muchas gracias por ayudarme gente

No dudo que tendré más problemas, pero una vez logre procesar los atributos, las cosas deberían ser más faciles.

:)

Felicidad
__________________
¡ hey, hou, hou, hey !
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:41.