0

時間に基づいて表示されるさまざまなオークション アイテムの XML ファイルがあります。AS3 を使用して、XML ファイルのフィールドに設定された時間に基づいて UTCDate を取得し、適切な XML ノードを表示したいと考えています。私は AS3+XML のほぼ中級者なので、助けを借りることができます。すべての設定が完了しましたが、何かが正しくありません。

AS3 コード:

import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flash.text.TextFormat;

var xmlData:XML = new XML();
var theURL_ur:URLRequest = new URLRequest("sample_auction.xml");
var loader_ul:URLLoader = new URLLoader(theURL_ur);
loader_ul.addEventListener("complete", fileLoaded);


var my_date:Date = new Date();
var currentHour:Number = my_date.getUTCHours() + (my_date.getUTCMinutes() / 60);
trace(currentHour);


function fileLoaded(e:Event):void
{
xmlData = XML(loader_ul.data);
for(var i:uint = 0; i < xmlData.auction.length(); i++)
{   
    if(xmlData.auction[i].time < currentHour)
    {
    auctionName_txt.text = xmlData.auction[i].title;
    auctionDesc_txt.text = xmlData.auction[i].description;
    }
}

}

毎回varを実行するなど、xmlからさまざまな時間を宣言する必要がありますか? 時間ノードが実際の時間であることを AS3 が認識できるようにするにはどうすればよいですか? サンプルの XML コードを次に示します。(また、私はまだイメージを呼び出していませんが、最初に適切なノードを読み取らせようとしています。)コンパイラエラーをスローしていませんが、まだ何をすべきかわかりません。

XML コード:

<auctionlist>
<auction>
<time>6:00</time>
<title>Example Auction 1</title>
<description>Placeholder Text blah blah.</description>
<image>sampleimage1.jpg</image>
</auction>


<auction>
<time>7:00</time>
<title>Example Auction 2</title>
<description>Placeholder text blbalblbladflknsdf</description>
<image>imagepath11.jpg</image>
</auction>


<auction>
<time>8:00</time>
<title>Sample Auction 3</title>
<description>Placeholder text asflkamdflkmasdfm</description>
<image>imagepath12.jpg</image>
</auction>


<auction>
<time>9:00</time>
<title>Sample Auction 4</title>
<description>Placeholder text blabjadsflkm afdlkmasf afmlksf mmasdflkm</description>
<image>imagepath12.jpg</image>
</auction>

どんな助けでも大歓迎です。

以下のコメントに基づいて、私は今これを持っています:

import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flash.text.TextFormat;

flash.system.Security.allowDomain('*');

var xmlData:XML = new XML();
var theURL_ur:URLRequest = new URLRequest("sample_auction.xml");
var loader_ul:URLLoader = new URLLoader(theURL_ur);
loader_ul.addEventListener("complete", fileLoaded);

var my_date:Date = new Date();
var currentHour:Number = my_date.getUTCHours() + (my_date.getUTCMinutes() / 60);
trace(currentHour);

function fileLoaded(e:Event):void
{
xmlData = XML(loader_ul.data);
for(var i:uint = 0; i < xmlData.auction.length(); i++)
{ 
var started:XMLList = xmlData.auction.(parseTime(time) >= currentHour);
for each (var item:XML in started)
{
    auctionName_txt.text = xmlData.auction[i].title;
    auctionDesc_txt.text = xmlData.auction[i].description;  
}       
}
}

function parseTime(time:String):Number {
var hour:int = time.split(":")[0];
var minute:int = time.split(":")[1];
return hour + minute / 60;
}

これは、時計を何時に設定しても、最後のノードを返します。これは近いと言えますが、ノード時間に限定されず、最後までループしているようです。

更新しました

これが最新のコードです。現在、データは生成されませんが、コンパイラ エラーはスローされません。クロックが何に調整されているかは問題ではありません:

import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flash.text.TextFormat;

flash.system.Security.allowDomain('*');

var xmlData:XML = new XML();
var theURL_ur:URLRequest = new URLRequest("sample_auction.xml");
var loader_ul:URLLoader = new URLLoader(theURL_ur);
loader_ul.addEventListener("complete", fileLoaded);

var my_date:Date = new Date();
var currentHour:String = my_date.getUTCHours() +":" + my_date.getUTCMinutes();
trace(currentHour);



function fileLoaded(e:Event):void
{
xmlData = new XML(loader_ul.data);
var started:XMLList = xmlData.auction.(parseTime(time) < currentHour);
for each (var item:XML in started)
{
    auctionName_txt.text = item.title;
auctionDesc_txt.text = item.description;    
}       
}

function parseTime(time:String):Number {
var hour:int = time.split(":")[0];
var minute:int = time.split(":")[1];
return hour + minute / 60;
}
4

1 に答える 1

0
var my_date:Date = new Date();
var currentHour:String = my_date.getUTCHours() +":" + my_date.getUTCMinutes();

— HH:MM 形式で UTC 時間を取得します。

trace(xml.auction.(time == currentHour))

「time」タグ値 == currentHour を持つノードをトレースします


しかし、あなたの場合、時間を比較しています。xml 時間値を解析し、正しい方法で Number にキャストしてください。

fileLoaded関数はのようになります。

function fileLoaded(e:Event):void
{
    xmlData = new XML(loader_ul.data);
    var started:XMLList = xmlData.auction.(parseTime(time) < currentHour);
    for each (var item:XML in started)
    {
        auctionName_txt.text = item.title;
        auctionDesc_txt.text = item.description; 
    }       
}

XML 時刻が UTC の場合は、parseTime関数も定義します。

function parseTime(time:String):Number {
    var hour:int = time.split(":")[0];
    var minute:int = time.split(":")[1];
    return hour + minute / 60;
}

または、XML 時間現地時間の場合:

function parseTime(time:String):Number {
    var hour:int = time.split(":")[0];
    var minute:int = time.split(":")[1];
    var date:Date = new Date();
    date.setHours(hour);
    date.setMinutes(minute);
    return date.getUTCHours() + date.getUTCMinutes() / 60
}
于 2013-07-08T19:22:16.337 に答える