Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/07/2008, 10:03
Avatar de SUSMO
SUSMO
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: XML Parser en PHP5

Hola a todos,

He hecho la equivalencia del constructor indicado en el post anterior hecho con XML Parser en PHP4 a simpleXML de PHP5 y aquí os pongo el código por si os pudiera servir de ayuda.

Código PHP:
function XML_Tree($sFile
{
    
$sxe = new SimpleXMLElement($sFileNULLTRUE);
        
    if (!
$sxe)
        
user_error("Error open XML file"E_USER_ERROR);
    else
        
$this->parseXML($sxe); 
}

function 
parseXML($sxe)
{
    
//Función que recibe cada elemento del XML y lo trata
        
    //Datos del nodo actual
    
$name $sxe->getName();
    
$attribs $sxe->attributes();

    
//Conversión de los atributos del nodo a un array. 
    //Se necesita para la función  _startElementHand 
    
$array_attribs = array();
    foreach (
$attribs as $key => $val 
    {
        
$array_attribs[$key] = (string)$val;
     }

     
$this->_startElementHand ($name$array_attribs);

      
//si el hijo no tiene array significa que tiene datos (información del nodo)
      
if (count($sxe) == 0)
      {    
            
$data $sxe[0];
  
            
//Error. No me lee si la información del nodo tiene CDATA
            
if (strstr($data,"<![CDATA["))
                echo 
"he encontrado el data ".$data;

            
$this->_CDataHand($data);
            
$this->_defaultHand($data);
        }
        
        
//Recursividad por cada hijo del nodo
    
foreach ($sxe->children() as $child)
        {
           
$this->parseXML($child);    
        }

        
$this->_endElementHand($name);   

Por lo que he testeado hasta ahora me funciona bien. Sólo hay un problemilla y es necesito saber que nodo tiene CDATA para tratarlo de una manera u otra y de la manera que lo he implementado no me funciona.

¿Alguien sabe como puedo mirarlo? ¿Tengo que descodificar de alguna forma el $data?
__________________
Perdida en el mundo del conocimiento