Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP y XML

Estas en el tema de PHP y XML en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/12/2008, 05:31
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 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.
  #2 (permalink)  
Antiguo 04/12/2008, 05:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: PHP y XML

Y si al final chequeas con gettype() el tipo..... o lo forzas asi ?

Código PHP:
return settype($elementoActual"object"); 
Seguro que el $elementoActual que recibis es un objeto ???

---

PD: tambien creo que podes anteponer el nombre de la clase del objeto que queres recibir en la interfaz de la funcion:

Código PHP:
Function BuscarConceptoActualsimplexmlelement $elementoActual
__________________
Salu2!

Última edición por Italico76; 04/12/2008 a las 06:00
  #3 (permalink)  
Antiguo 04/12/2008, 06:56
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: PHP y XML

Muchas gracias italico76 por tu interés.

He probado lo que me has dicho pero sigue sin funcionar.

$elementoActual es un elemento simplexmlelement (o eso creo, que es la primera vez que trabajo con xml).

Es que el fallo es la ostia, te cuento.

Dentro del método, todo funciona perfectamente, puedo obtener el nombre del elemento, el nombre de sus hijos... Pero cuando devolvemos el elemento simplexmlelement, una vez supuestamente conseguido el elemento que quería, intentó obtener sus hijos y me dice Fatal error: Call to a member function getName() on a non-object in...

El cachondeo es que si el usuario selecciona un concepto que no tiene isa, es decir que no le fuerza al método a llamarse a sí mismo otra vez(en la primera ejecución se va por el else) el método devuelve un simplexmlelement, ya que fuera del método me sigue permitiendo obtener sus hijos...

No sé porque pero me tiene desquiciado!

Un saludo, y muchas gracias de antemano
  #4 (permalink)  
Antiguo 04/12/2008, 08:21
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: PHP y XML

Hola Italico76,

No te preocupes que ya he encontrado el fallo, era tan absurdo como que dentro del método la llamada que se hace al propio método debe incluir un return

Function BuscarConceptoActual($elementoActual)
{
foreach ($elementoActual->children() as $hijo)
{
if($hijo->getName()=="isa")
{
$isa=$hijo;
}
else
{
return $elementoActual;
}
}
$elementoActual=$isa->concepto;
return BuscarConceptoActual($elementoActual);
}


Gracias de nuevo por tu interés. Un saludo
  #5 (permalink)  
Antiguo 04/12/2008, 08:47
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: PHP y XML

kurtinaitis: en un momento me parecio eso..... pero despues pense que quizas vi mal........

Fijate que no identas nada.......

Me alegro todo funke bien ahora
__________________
Salu2!
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 06:39.