Ну, это решение "не пытайтесь делать это дома", но вы здесь.:)
Вы можете использовать поисковое выражение E4X, чтобы делать все, что вы хотите, с узлами XMLList.
Это работает следующим образом: someXMLList.(expression)
, где выражение - это любой код AS3, который может обращаться к свойствам и методам каждого узла без необходимости уточнения их имен.Например, вы можете сделать следующее:
yourXML.descendants("label").(trace("label text: ", text()));
Обратите внимание, что я использую text()
здесь без операций доступа .
.На самом деле это вернет новый XMLList для всех узлов, где выражение оценивается как true
.Поскольку trace()
возвращает void, результирующий список будет пустым.Внутри, конечно, есть цикл через все узлы XMLLIst, который создается путем вызова descendants()
(или с использованием оператора ..
).
Вы можете создать свой массив таким же образом.
var doc:XML =
<links>
<link>
<label>Versions</label>
<href>http://mylink1</href>
</link>
<link>
<label>Configurations</label>
<href>http://myLink2</href>
</link>
<link>
<label>A label
with
multiple
line
breaks</label>
<href>http://myLink3</href>
</link>
</links>;
trace(doc.descendants("label").text().toXMLString().split("\n"));
/* Trace output (incorrect):
Versions,Configurations,A label
,with
,multiple
,line
,breaks
*/
var list:Array = [];
doc.descendants("label").(list.push(text().toString()));
trace(list);
/* Trace output (correct):
Versions,Configurations,A label
with
multiple
line
breaks
*/
Это может быть полезно при выполнении некоторых сложных поисков в XMLList.Однако в вашем случае я думаю, что вместо этого вы должны использовать простое разбиение строкового представления или регулярного выражения, как предлагает Шейн.