Что ж, это решение "не пробуйте это дома", но вот оно что. :)
Вы можете использовать выражение поиска 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. Однако в вашем случае я думаю, вам следует вместо этого использовать простое разделение строкового представления или регулярного выражения, как предлагает Шейн.
person
Michael Antipin
schedule
26.07.2011