Tema: PHP y XML
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/12/2008, 05:31
kurtinaitis
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 8 meses
Puntos: 0
PHP y XML

Hola muy buenas a todos,

Estoy trabajando con php y Xml y me ha surgido un fallo, que aunque lo puedo resolver de manera más compleja, no entiendo a qué se debe.

La aplicación consiste en lo siguiente:

El usuario a través de una serie de interfaces, realiza una consulta que se guarda en un xml. Este XML va a ser enviado a diversas bases de datos, donde cada una de ellas se encargará de traducirlo a su propio lenguaje de base de datos.

Ahora mismo estoy programando el traductor de una de las bases de datos, y aquí es donde se encuentra el fallo.

La cosa es que el xml esta estructurado de esta forma

DTD del xml

<!ELEMENT concepto (isa | (atributo*))>
<!ELEMENT isa (CONCEPTO)>
...

Como veis un concepto puede tener bien una isa o bien atributos. Yo lo que pretendo conseguir es llegar al concepto que no tenga isa, que solo tenga atributos.

Para esto he hecho un método recursivo que dice lo siguiente

Function BuscarConceptoActual($elementoActual)
{
//Recorre cada hijo del $elementoActual(que es el concepto raíz del xml) y busca si hay algún hijo cuyo nombre es "isa", si encuentra alguno es que ese concepto tiene una isa, por lo que llama otra vez al método, sino encuentra ninguno devuelve el $elementoActual, que es el concepto que buscaba;
foreach ($elementoActual->children() as $hijo)
{
if($hijo->getName()=="isa")
{
$isa=$hijo;
}
else
{
$elementoActual->getName();
return $elementoActual;
}
}
$elementoActual=$isa->concepto;
BuscarConceptoActual($elementoActual);
}

EL PROBLEMA ES QUE CUANDO HAGO EL RETURN EN VEZ DE RECIBIRLO COMO UN OBJETO SIMPLEXMLELEMENT, LO RECIBO VACÍO O NO SÉ DE QUÉ TIPO, PERO TAMPOCO ES UN STRING;

La llamada al métod es esta:
$elementoActual=BuscarConceptoActual($elementoActu al);

Si alguien me puede ayudar le estaría muy agradecido.