Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ActionScript3中的xml_Xml_Actionscript 3 - Fatal编程技术网

ActionScript3中的xml

ActionScript3中的xml,xml,actionscript-3,Xml,Actionscript 3,Im使用以下代码为网站创建简单的倒计时: //Create your Date() object var endDate:Date = new Date(2009,8,5); //Create your Timer object //The time being set with milliseconds(1000 milliseconds = 1 second) var countdownTimer:Timer = new Timer(1000); //Adding an event lis

Im使用以下代码为网站创建简单的倒计时:

//Create your Date() object
var endDate:Date = new Date(2009,8,5);
//Create your Timer object
//The time being set with milliseconds(1000 milliseconds = 1 second)
var countdownTimer:Timer = new Timer(1000);

//Adding an event listener to the timer object
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
//Initializing timer object
countdownTimer.start();
//Calculate the time remaining as it is being updated
function updateTime(e:TimerEvent):void
{
//Current time
    var now:Date = new Date();
    var timeLeft:Number = endDate.getTime() - now.getTime();
    //Converting the remaining time into seconds, minutes, hours, and days
    var seconds:Number = Math.floor(timeLeft / 1000);
    var minutes:Number = Math.floor(seconds / 60);
    var hours:Number = Math.floor(minutes / 60);
    var days:Number = Math.floor(hours / 24);

//Storing the remainder of this division problem
seconds %= 60;
minutes %= 60;
hours %= 24;

//Converting numerical values into strings so that
//we string all of these numbers together for the display
var sec:String = seconds.toString();
var min:String = minutes.toString();
var hrs:String = hours.toString();
var d:String = days.toString();

//Setting up a few restrictions for when the current time reaches a single digit
if (sec.length < 2) {
    sec = "0" + sec;
}

if (min.length < 2) {
    min = "0" + min;
}

if (hrs.length < 2) {
    hrs = "0" + hrs;
}

if (d.length < 2) {
    d = "0" + d;
}


//Stringing all of the numbers together for the display
var time:String = d + ":" + hrs + ":" + min + ":" + sec;
//Setting the string to the display
time_txt.text = time;
}
(代码的其余部分如上所述,但例如省略)

trace语句显示从xml文件加载的日期是正确的,但是倒计时已经过了几千天

我认为这可能与数据类型是int而不是字符串有关,但不太确定。有没有办法让这一切顺利进行


编辑:

以下是原始问题的XML格式:

<countdown> 2009,8,5 </countdown>
2009,8,5

您可能需要解析生成的xml字符串,并以更明确的方式创建日期:

var endDate:Date = new Date(xml.@year, xml.@month, xml.@date, xml.@hour, xml.@minutes, xml.@seconds, xml.@ms)

请务必记住,有几个日期属性是0索引。具体是月份。

XML中的日期格式是什么?如果您使用的是从C#传递的时间戳,那么您需要知道它们的格式从第0年开始,而ActionScript从1970年开始。下面是一个C#中的快速代码片段,可以将其转换为:

否则,乔尔建议的是一个好的解决方案


编辑:

给定如下所示的xml字符串:

<countdown> 2009,8,5 </countdown>
但我可能会选择更好的XML格式:

package
{

import flash.display.Sprite;

public class DateTest extends Sprite
{
    public function DateTest()
    {
        var xml:XML = <countdown year='2009' month='8' day='5' />;

        // put it into a date object
        // NOTE: we -1 from the month since months are 0 based
        var endDate:Date = new Date(xml.@year, xml.@month - 1, xml.@day);

        trace(endDate);
    }
}

}
包
{
导入flash.display.Sprite;
公共类DateTest扩展了Sprite
{
公共函数DateTest()
{
var-xml:xml=;
//将其放入日期对象中
//注意:我们从月份开始计算-1,因为月份是以0为基础的
var endDate:Date=新日期(xml.@year,xml.@month-1,xml.@day);
跟踪(结束日期);
}
}
}

注意。您的代码中有一个很大的错误。 您正在加载XML之前实例化endDate。 只有在调用loadXML时才会加载xml。这意味着xml是空的,并用空值实例化日期,它将给您Unix纪元的乞讨作为时间戳(Thu Jan 1 02:00:00 GMT+0200 1970),从而产生“几千”天的差异

我只想指出另一个明显的错误。 正确加载xml并跟踪(2000,8,5),然后使用该值进行倒计时就像(错误地)调用日期构造函数一样

var endDate:Date = new Date("2009,8,5"); // note the quotes
// because what you trace from the xml is a string
与第一个示例中使用的正确调用相反。 否则,Joel给出了一个示例,说明如果要更改xml结构,如何轻松地将该值传递给日期构造函数

如果要测试endDate跟踪输出,则会收到无效的日期

如果您不想接触您的xml,那么可以使用类似这样的内容

//load in xml
var xml:int = 0
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadXML);
loader.load(new URLRequest("countdown.xml"));
var endDate:Date;
function loadXML(e:Event):void
{
    var xml = new XML(e.target.data) ;
    var xmlDate:Array = String(xml).split(",");
    endDate = new Date(parseInt(xmlDate[0]), parseInt(xmlDate[1])-1, parseInt(xmlDate[2]));
    trace(endDate);
}

我的xml文件如下所示:2009,8,5这是我第一次尝试使用xml文件,因此我不确定如何正确构造它?因此,我是否需要在xml文件中的不同标记中包含年、月、日期、小时等。你能给我一个如何设置xml的例子吗,因为目前我有:2009,8,5,基于xml格式,我已经更新了我的答案。谢谢,现在效果很好。不过,我确实删除了parseInt(xmlDate[1])之后的-1,因为它将日期设置为1个月,并且不太清楚为什么要在那里添加这个值。因为,正如其他人所提到的,month属性是零索引。这当然取决于如何提供xml。“2009.8.5”这个字串让我想起了8月5日。这只是一件需要记住的事情。
package
{

import flash.display.Sprite;

public class DateTest extends Sprite
{
    public function DateTest()
    {
        var xml:XML = <countdown year='2009' month='8' day='5' />;

        // put it into a date object
        // NOTE: we -1 from the month since months are 0 based
        var endDate:Date = new Date(xml.@year, xml.@month - 1, xml.@day);

        trace(endDate);
    }
}

}
var endDate:Date = new Date("2009,8,5"); // note the quotes
// because what you trace from the xml is a string
//load in xml
var xml:int = 0
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadXML);
loader.load(new URLRequest("countdown.xml"));
var endDate:Date;
function loadXML(e:Event):void
{
    var xml = new XML(e.target.data) ;
    var xmlDate:Array = String(xml).split(",");
    endDate = new Date(parseInt(xmlDate[0]), parseInt(xmlDate[1])-1, parseInt(xmlDate[2]));
    trace(endDate);
}