Comunidad de diseño web y desarrollo en internet online

Lectura Problematica de XML con E4X

Citar            
MensajeEscrito el 06 Mar 2009 10:25 am
Hola a todos!!!
Tengo un problemilla que no entiendo muy bien porque no me funciona. Estoy trabajando con E4X y la verdad que es muy cómodo, con un uso muy similar a un recorrido de objetos pero tengo una pega. Veamos, toy haciendo una aplicación que recibe un en XML en formato cadena desde jsp o php (eso no lo he hecho aun) pero como recibo un string para probarlo, he metido el XML en una variable string y luego he hecho esto:

Código :

var usuarioXML2:XML= new XML(cadenaXML);

Hasta ahí todo bien.
Ahora a la hora de recorrerlo sucede lo siguiente. Una parte del XML es:

Código :

<act completed="false" identifier="act-ec911ae7-69c5-76ca-82a2-7cc59446414d" time-limit="false">
      <title>Act2</title>
      <role-part completed="false" identifier="rolepart-4970a421-15c6-0f91-8ebd-62e969ae5c42"/>
      <role-part completed="false" identifier="rolepart-2af03b6c-96ec-96c6-9e7c-1d32ea502744">
        <learning-activity completed="false" environment="" identifier="la-f2e4ba27-edb1-fcbe-fdc2-840f29e2b1a3" isvisible="false" time-limit="false" user-choice="true">
          <title>task3</title>
        </learning-activity>
      </role-part>
    </act>


Todo funciona bien hasta donde he visto pero al intentar acceder a la etiqueta/propiedad role-part me devuelve un mensaje como el siguiente:
trace(usuarioXML2.act.role-part);

Error:
Acceso a una propiedad part no definida.

Por lo que entiendo no reconoce el nombre de etiqueta formado por un "-" pero el problema es que yo no puedo modificar eso, puesto que recibo el XML de una aplicación externa que no puedo modificar....
Alguien me puede decir si existe alguna forma de acceder al hijo de act o algo así sin tener que poner el nombre de la etiqueta o algo similar. Lo que debo hacer es situarme en el atributo

Código :

<role-part completed="false" identifier="rolepart-2af03b6c-96ec-96c6-9e7c-1d32ea502744">
        <learning-activity completed="false" environment="" identifier="la-f2e4ba27-edb1-fcbe-fdc2-840f29e2b1a3" isvisible="false" time-limit="false" user-choice="true">
          <title>task3</title>
        </learning-activity>
</role-part>


Para tratar la información intermedia. Al tiempo que supongo tendré el mismo problema con <learning-activity>

Si alguien pudiera ayudarme os lo agradecería muchísimo. Muchas gracias de antemano y un saludo a todos.
Seguir así que sois la leche.
Ciaoo

Por illo_guay

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 11:05 am
te falta cerrar la etiqueta del segundo role-part (la "/")

<role-part completed="false" identifier="rolepart-2af03b6c-96ec-96c6
-9e7c-1d32ea502744"/>

Tip:Si abrimos un fichero XML en cualquier navegador, podemos comprobar si está bien formado (si no se nos han escapado etiquetas de cierre y esas cosas

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 11:23 am
Hola Eliseo2.
gracias por tu ayuda pero creo que eso no es porque si te fijas el primer role-part esta cerrado al final como tu dices y el segundo esta cerrado 3 lineas mas abajo con la etiqueta </role-part>

Código :

<role-part completed="false" identifier="rolepart-4970a421-15c6-0f91-8ebd-62e969ae5c42"/>
<role-part completed="false" identifier="rolepart-2af03b6c-96ec-96c6-9e7c-1d32ea502744">
     <learning-activity completed="false" environment="" identifier="la-f2e4ba27-edb1-fcbe-fdc2-840f29e2b1a3" isvisible="false" time-limit="false" user-choice="true">
      <title>task3</title>
      </learning-activity>
 </role-part>


creo que esta bien. Si no es asi dimelo por favor. Sabes si hay algun problema con los nombres de etiquetas que tengan un "-" en medio??
es que no se me ocurren muchas cosas mas....
Muchas gracias de nuevo

Por illo_guay

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 12:30 pm
Perdona por leer tan tápido. Creí que le faltaba el cierre y no miré nada más . :(

Creo que puedes escribir

Código ActionScript :

usuarioXML2.act["role-part"]


Si no fuera así sería una putada. Aunque, bueno, se pueden siempre sustituir los "role-part" por, p.e. "role_part". (idénticamente con los "learning-activity")

Código ActionScript :

var usuarioXML2:XML= new XML(cadenaXML.replace("role-part","role_part").replace("learning-activity","learning_activity"));

claro, pregunta por role_part y por learning_activity

NOTA:Dale un "coscorrón" de mi parte al que creó el XML :)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 03:39 pm
No te disculpes tio!! Muchisimas gracias que me acabas de solucionar casi casi la vida que llevaba desde ayer con la tontuna esa que no se que le pasaba y no sabia como hacerlo, es que soy un poco nuevo.jeje.
Gracias de nuevo que funciona perfectamente lo de trace(usuarioXML.act["role-part"]);

Solo hay una pega.... (jeje). como ves hay dos entradas/etiquetas role-part.
si pongo :

Código :

trace(usuarioXML.act["role-part"][1]);

Me muestra la segunda:

Código :

<role-part completed="false" identifier="rolepart-2af03b6c-96ec-96c6-9e7c-1d32ea502744">
        <learning-activity completed="false" environment="" identifier="la-f2e4ba27-edb1-fcbe-fdc2-840f29e2b1a3" isvisible="false" time-limit="false" user-choice="true">
          <title>task3</title>
        </learning-activity>
      </role-part>


Pero si pongo:

Código :

trace(usuarioXML.act["role-part"][0]);


Entonces no me muestra la primera de las dos.

Código :

<role-part completed="false" identifier="rolepart-4970a421-15c6-0f91-8ebd-62e969ae5c42"/>


Sabes porque podria ser eso??

Muchas gracias de veras por todo y perdona por volver a molestarte.
Un abrazo que sois la leche.

Por illo_guay

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 04:37 pm
Los XML empiezan por 0 -igual que los arrays- Por eso, si le decimos [1] devuelve el segundo

Código ActionScript :

trace(usuarioXML.act["role-part"][0].toXMLString()); //debería dar la representación del primer "role-part"

Código ActionScript :

trace(usuarioXML.act["role-part"][0].@identifier); //debería darte el argumento identifier del primer "role-part"

Es que no tengo Flash a mano, pero creo que, si no tiene contenido, un simple trace no devuelve nada.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 04:42 pm
aaaaaaaamigo!! va a ser eso porque si accedo a los atributos si que lo muestra.... Creo que va a ser eso
Muchas gracias tio. Creo que con eso voy servido un tiempecito....
Gracias de nuevo y suerte con todo.

Por illo_guay

35 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.