1

FlashCS6を使用しています-AdobeAIR3.3:XMLで検索したいものを正確に入力する代わりに、さまざまなカテゴリや曜日を検索するように変更できる動的変数を使用したいと思います。以下は、私が使用したいコードのようなものです。

var someCategory:String = new String("food");
var someDay:String = new String("monday");

var locationsLoader:URLLoader = new URLLoader();
locationsLoader.load(new URLRequest("http://www.myfile.xml"));
locationsLoader.addEventListener(Event.COMPLETE, init);

//load xml

function init(e:Event):void
{
theXML = new XML(e.target.data);
theXML.ignoreWhitespace = true;
e.currentTarget.close();

for(var i:int = 0; i < theXML.someCategory.length(); i++) 
{
if(theXML.someCategory[i].somdDay != "un")
{
//do soemthing
}
}

このコードは現在、「for」ループと「if」ループに実際に「food」と「monday」を入力した場合にのみ機能します。助言がありますか?

XMLは...

<xml>
<food>
<monday>yes</monday>
</food>
<food>
<monday>yes 2</monday>
</food>
<food>
<monday>un</monday>
</food>

</xml>

現在機能しているものは次のとおりです。

var someCategory:String = new String("food");
var someDay:String = new String("monday");

var locationsLoader:URLLoader = new URLLoader();
locationsLoader.load(new URLRequest("http://www.myfile.xml"));
locationsLoader.addEventListener(Event.COMPLETE, init);

//load xml

function init(e:Event):void
{
theXML = new XML(e.target.data);
theXML.ignoreWhitespace = true;
e.currentTarget.close();

for(var i:int = 0; i < theXML.food.length(); i++) 
{
if(theXML.food[i].monday != "un")
{
//do soemthing
}
}
4

2 に答える 2

0

コードをコピーし、各部分を段階的に変更していくと、変更を加えるたびに同じ結果が得られるように見えたので、以下の内容が正しいと思います。

package
{
    import flash.display.Sprite;

    public class TestAS3Project extends Sprite
    {
        public var theXML:XML = new XML(<xml>
                <food>
                    <monday>yes</monday>
                </food>
                <food>
                    <monday>yes 2</monday>
                </food>
                <food>
                    <monday>un</monday>
                </food>

            </xml>);
        public function TestAS3Project()
        {
            init();
        }
        private function init():void
        {

            var someCategory:String = new String("food");
            var someDay:String = new String("monday");

            theXML.ignoreWhitespace = true;

            for(var i:int = 0; i < theXML[someCategory].length(); i++) 
            {
                if(theXML[someCategory][i][someDay] != "un")
                {
                    //do soemthing
                    trace(theXML[someCategory][i][someDay]);
                }
            }
        }
    }
}
于 2012-07-30T23:04:17.087 に答える
0

条件文を使用し、for eachループの代わりにループを使用しforます。

var cat:String = new String("food");
var day:String = new String("monday");

for each (var node:XML in theXML[cat].(child(day) != 'un')) {
    trace(node[day]);
}

theXML[cat].(child(day) != 'un')部分は意味します

(ループ)ノード名[cat]子ノードごとに、ノード名[day]の子ノードがあり、その値は「un」ではありません。

于 2012-07-30T23:39:42.610 に答える