Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema con xml_set_default_handler en php5

Estas en el tema de Problema con xml_set_default_handler en php5 en el foro de Programación General en Foros del Web. Hola a todos, Estoy empezando con los XMLs ya que tengo que migrar una aplicación hecha con php4 a php5 que guarda toda la información ...
  #1 (permalink)  
Antiguo 16/07/2008, 05:14
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Problema con xml_set_default_handler en php5

Hola a todos,

Estoy empezando con los XMLs ya que tengo que migrar una aplicación hecha con php4 a php5 que guarda toda la información en xmls.
Llevo días mirando de solucionar los problemas y cada vez estoy más confusa, a ver si me podéis echar una mano.

Para el tratamiento de los xml tengo 2 clases, la XMLTree que lee el archivo y la XMLNode que crea los nodos. Mi problema reside en la clase XMLTree

Aquí está el constructor de XMLTree:
Código PHP:
function XML_Tree($sFile
{
    
$sFileCont join(file($sFile), "");

    
$rPar xml_parser_create("UTF-8");
    
xml_parser_set_option($rParXML_OPTION_CASE_FOLDING0);
    
xml_parser_set_option($rPar,XML_OPTION_TARGET_ENCODING"UTF-8");
        
    
xml_set_object($rPar$this);
        
    
xml_set_element_handler($rPar"_startElementHand""_endElementHand");
    
xml_set_character_data_handler($rPar"_CDataHand");
    
xml_set_default_handler($rPar"_defaultHand");
        
    
xml_parse($rPar$sFileConttrue)
            or 
user_error(xml_error_string(xml_get_error_code($rPar)). ' line:' xml_get_current_line_number($rPar) . ' column:' xml_get_current_column_number($rPar) . "<br />The file $sFile has invalid syntax"E_USER_WARNING);

En php4 todo va a la perfección pero debugando en php5 he visto que en la función __defaultHand no entra así que el código ya hecho deja de funcionar.
También he visto que no me lee bien las palabras de la información xml de tal manera que en la función _CDataHand me lee las palabras con accentos en dos partes por ejemplo: Català me lee un data como Catal y otro como à.

He estado mirando documentación de php, en google, foros, manuales... pero en todos sitios me habla de la magnífica clase que exíste para php5 SIMPLEXML pero no me hablan de que haya ninguna diferencia entre xml_set_default_handler de php4 y de php5, ni siquiera en php.net.

¿Alguién puede indicarme el motivo del error o orientarme donde buscar información? ¿Pq se comportan diferente en las versiones de php?

Mi problema también reside en mi inexperiencia y en que no entiendo como funciona el tratamiento de los XML ya que por mucho que me lea la documentación de la página oficial de php no me aclaro.

¿Alguien me puede recomendar algún manual para "tontos"? (y no vale decir que php.net lo explica bien pq yo no me entero ) o explicarme por encima el funcionamiento de el parseo de los xmls ;)
  #2 (permalink)  
Antiguo 17/07/2008, 10:51
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Problema con xml_set_default_handler en php5

Hola!!

Al final le cambiado el constructor de la clase y en lugar de utiliziar XML Parser utilizo simpleXML para php5. De esta manera se me ha solucionado el problema de la partición de palabras con acentos en partes.

Ahora me ha surgido otro problema. Cuando en el xml hay una sección CDATA al mostrarlo por la web no me ejecuta el código html sino que me lo muestra tal cual.

ejemplo:

Código PHP:
<data lang="cas">
    <![
CDATA[<div align="justify">Hola</div>]]>
</
data
Al imprimirlo por pantalla me muestra:
<div align="justify">Hola</div>

¿Cómo puedo solucionarlo?
¿Cómo puedo sabe que el nodo <data lang="cas"> tiene una sección CDATA?
__________________
Perdida en el mundo del conocimiento
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 20:16.