Проверка значения атрибута XML

#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 слева присутствует. Извините, если я не совсем ясно выражаюсь.