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($sFile, NULL, TRUE);
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?