При работе с XML, вы почти всегда лучше использовать XMLListCollection. По большей части вам не понадобится дополнительная функциональность ArrayCollection, и XMLListCollection, безусловно, сделает вещи намного проще. Кроме того, ArrayCollections не всегда правильно сериализуют вещи. Я не могу дать вам определенное обстоятельство, но я знаю, что мне пришлось реорганизовать, потому что XML не был должным образом сохранен. Наконец, XMLListCollection.toXMLString()
даст вам гораздо лучший обзор состояния данных, чем ArrayCollection.toString
.
С XMLListCollection, что вы ищете будет сделано в одном из следующих способов:
var coll:XMLListCollection = <xml-here/>
// Iterate through all of the children nodes
for(var i:int = 0; i < coll.children().length(); i++)
{
var currentNode:XML = coll.children()[ i ];
// Notice the QName class? It is used with XML.
// It IS NOT a String, and if you forget to cast them, then
// currentNode.localName() will NEVER be "city", even though it may
// trace that way.
var name:QName = currentNode.name(); // url.to.namespace::city
var locName:QName = currentNode.localName() // City
}
// get all city nodes in the current parent element
var currCities:XMLList = currentParentNode.cities; // currentParentNode can be
// an XMLList, an XML object, an XMLListAdapter, or an XMLListCollection.
// This means that you can do something like coll.cities.cities, if there are
// children nodes like that.
for(i = 0; i < cities.length(); i++)
{
var currentCity:XML = cities[ i ];
}
// get all city nodes in all descendant nodes.
var cities:XMLList = currentParentNode.descendants(
new QName("url.to.namespace", "City")
);
for(i = 0; i < cities.length(); i++)
{
var currentCity:XML = cities[ i ];
}
Если вы действительно должны использовать ArrayCollection, то вы можете использовать для ... в синтаксисе для достижения что вы хотите:
// This is one of the few times I recommend anonymous typing. When dealing with
// XML (which likely has already been turned into a String anyway, but be safe)
// anonymous syntax can give you better results.
// it = iterant, I use this to contrast with i for my sanity.
for(var it:* in coll)
{
trace(it,"=",coll[ it ]);
}