#xml #flash #actionscript-3
#xml #flash #actionscript-3
Вопрос:
Не уверен, как бы я проверил, равно ли значение атрибута узлов «action» «left». Мой XML выглядит следующим образом:
<track timestamp="18/05/2011 13:21:49-0400" id="3" action="track">
<coordinates> test 1</coordinates>
</track>
<track timestamp="18/05/2011 13:21:49-0400" id="3" action="track">
<coordinates> test 1</coordinates>
</track>
<track timestamp="18/05/2011 13:21:49-0400" id="3" action="left">
<coordinates> test 1</coordinates>
</track>
<track timestamp="18/05/2011 13:21:49-0400" id="3" action="track">
<coordinates> test 1</coordinates>
</track>
Я думаю, мне нужно просмотреть XML-данные и проверить, и если это правда, запустите мою функцию. Это то, что у меня есть до сих пор:
var myXML:XML;
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("get_data.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
myXML = new XML(e.target.data);
for (var i:int = 0; i<myXML.*.length(); i ){
if (myXML.tracking[i].action == "left")
{
start_animation();
}
};
}
Ответ №1:
Вы можете просто выбрать все узлы с определенным значением следующим образом:
node.(@attribute == "value")
В качестве примера, это выведет только узлы, для которых side
задано значение "left"
:
var xml:XML =
<list>
<node side="left">hi</node>
<node side="left">there</node>
<node side="right">marty</node>
</list>;
trace(xml.node.(@side == "left"));
Вывод:
<node side="left">hi</node>
<node side="left">there</node>
Вы можете присвоить это XML-списку следующим образом:
var list:XMLList = xml.node.(@side == "left");
И затем выполните итерацию, как обычно:
var i:XML;
for each(i in list)
{
trace(i);
}
В ответ на ваш вопрос с комментарием:
Вы можете использовать length()
свойство, чтобы указать, сколько узлов было найдено с заданной левой стороной, вот так:
var xml:XML =
<list>
<node side="left">hi</node>
<node side="left">there</node>
<node side="right">marty</node>
</list>;
var list:XMLList = xml.node.(@side == "left");
// check if a node was found
if(list.length() > 0)
{
doStuff();
}
function doStuff():void
{
trace("a node had its side set as left");
}
Комментарии:
1. это здорово! рекомендуете ли вы какие-либо онлайн-ресурсы для as3 / xml?
2. могу ли я сделать что-то вроде total = count (xml.node. (@side == «слева»)); if (count != 0){ выполнить мою функцию} (php)
3. Спасибо! Это тот, который я использовал долгое время назад: kirupa.com/developer/flashcs3/using_xml_as3_pg1.htm
4. еще раз спасибо за ваш ответ. Вам придется извинить меня, если у меня все еще есть другие вопросы. Ваш приведенный выше код покажет данные, если установлено значение «left», но в этом случае никаких действий не предпринимается. Возможно ли это?
5. Итак, мне действительно не нужна никакая другая информация из XML, кроме как вызвать функцию (только один раз), если где-либо в XML слева присутствует. Извините, если я не совсем ясно выражаюсь.