Работая с XML в ActionScript 3 вы в основном имеете дело с двумя объектами: XML (
Top level XML) и XMLList (
Top level XMLList). Существенная разница между ними в том, что XML – это один элемент XML-дерева, например узел (который может содержать произвольное количество вложенных узлов), а XMLList массив элементов (1 или более).
Код:
// XML:
<foo>
<foo />
<foo />
<foo />
</foo>
Код:
// XMLList:
<foo />
<foo />
<foo />
В первом примере есть один корневой узел и это будет представлено как XML объект. Во втором примере список узлов, это уже будет XMLList.
В отличие от старого XML объекта из предыдущих версий ActionScript (который теперь XMLDocument), новые XML и XMLList могут представлять из себя не только узлы XML дерева (nodes), но и другие значения, например атрибуты:
Код:
var myXML:XML = <foo>
<foo bar="bar1" />
<foo bar="bar2" />
<foo bar="bar3" />
</foo>;
trace(myXML.foo.@bar.toXMLString());
/* Output:
bar1
bar2
bar3
*/
trace(myXML.foo.@bar is XMLList); // true
Заметьте, что атрибуты всегда возвращаются как XMLList, даже если в итоге получается только один атрибут:
Код:
trace(myXML.foo[0].@bar is XMLList); // true
Для того чтобы получить XML объект, нужно из возвращаемого массива взять первый элемент:
Код:
trace(myXML.foo[0].@bar[0] is XML); // true
Аналогичная ситуация и с вложенными узлами XML:
Код:
var myXML:XML = <foo>
<foo />
</foo>;
trace(myXML.foo is XMLList); // true