Pregunta

Estoy teniendo problemas manualmente bucle a través de los datos xml que se recibe a través de un HTTPService llamada, el xml se ve algo como esto:


<DataTable>
    <Row>
        <text>foo</text>
    </Row>
    <Row>
        <text>bar</text>
    </Row>
</DataTable>

Cuando el webservie resultado del evento es disparado puedo hacer algo como esto:


for(var i:int=0;i<event.result.DataTable.Row.length;i++)
{
    if(event.result.DataTable.Row[i].text == "foo")
        mx.controls.Alert.show('foo found!');

}

Este código funciona, entonces hay más de 1 "Fila" nodos devueltos, sin embargo parece que si sólo hay una "Fila" nodo, entonces el caso.DataTable.Objeto de fila no es un error y el código posteriormente se rompe.

¿Cuál es la forma correcta de bucle a través de la HTTPService objeto de resultado?Necesito convertirlo a algún tipo de objeto XMLList colección o un ArrayCollection?He probado la configuración de la resultFormat a "e4x" y que todavía tiene que solucionar el problema...

Gracias

¿Fue útil?

Solución

El problema radica en que esta declaración

event.result.DataTable.Row.length

length no es una propiedad de XMLList, pero un método:

event.result.DataTable.Row.length()

es confuso, pero esa es la manera que es.

Además: en realidad, lo más seguro es utilizar siempre un for each bucle cuando se itera sobre XMLLists, de esa manera usted nunca cometan el error, es menos código y más fácil de leer:

for each ( var node : XML in event.result.DataTable.Row )

Otros consejos

Fila no es una matriz, a menos que existan varios elementos de Fila.Es molesto.Tienes que hacer algo como esto, pero yo no he escrito AS3 en un tiempo, así que se me olvide si no existe una función.

if (exists(event.result.DataTable) && exists(event.result.DataTable.Row)){
  if (exists(event.result.DataTable.Row.length)) {
    for(var i:int=0;i<event.result.DataTable.Row.length;i++)
    {
        if (exists(event.result.DataTable.Row[i].text)
        && "foo" == event.result.DataTable.Row[i].text)
            mx.controls.Alert.show('foo found!');
    }
  }
  if (exists(event.result.DataTable.Row.text)
  && "foo" == event.result.DataTable.Row.text)
      mx.controls.Alert.show('foo found!');
}

Podría almacenar en un objeto Xml y, a continuación, utilizar sus métodos para buscar el nodo de valor que usted necesita.

var returnedXml:Xml = new Xml(event.result.toString());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top