2015-03-19 104 views
0

我正在从xml文件加载一些数据到flash项目作为值..数字工作正常,但布尔值(真,假)不工作!如何在as3中使用xml中的布尔值(true,false)?

XML数据:

<?xml version="1.0" encoding="utf-8"?> 
<SETTINGS> 
<SET VALUE="2">Size</SET> 
<SET VALUE="false">Lock</SET> 
</SETTINGS> 

AS3代码:

var myXML:XML; 
var myLoader:URLLoader = new URLLoader(); 
myLoader.load(new URLRequest("settings.xml")); 
myLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void 
{ 
    myXML = new XML(e.target.data); 

    size_ns.value = myXML.SET[0][email protected]; 
    lock_cb.selected = myXML.SET[1][email protected]; 
    trace(myXML.SET[1][email protected]); 
}; 

输出:假

但lock_cb.selected仍然如此! 谢谢

+0

我不明白如何在XML文件中将输出设置为“true”时输出可能为“假”? – Aaron 2015-03-19 03:00:47

+0

对不起,这是假的我已经改变了它.. – Nezarov 2015-03-19 03:02:07

回答

0

字符串false的计算结果为布尔真,可以通过将其与字符串true进行比较将其转换为布尔值。

尝试

lock_cb.selected = myXML.SET[1][email protected] === 'true'; 
+0

谢谢你的回复,但我不能设置Flash文件内的值..它应该是一个用户的设置文件! – Nezarov 2015-03-19 03:14:25

0

我相信您有XML type conversion问题。请记住,所有E4X查询都将返回XMLXMLList对象,并且只能隐式转换为Strings。换句话说,VALUE是字符串"false"而不是布尔值false

但是,您可以通过比较其转换为一个布尔值:

var value:Boolean = myXML.SET[1][email protected] == true; 

这工作,因为the == operator will convert both values to strings when one operand is an XML attribute"true" == "true"成为true,而"false" == "true"变得false。换句话说,它是与此相同:

var value:Boolean = myXML.SET[1][email protected] == "true"; 

原因的数字作品是因为分配StringNumber将隐式解析字符串转换成数字。

是的,隐式转换可能会让事情变得混乱。

作为最后一点,这可能超出您现在或想要做的,但JSON支持布尔值,数字和空值,所以您不会遇到同样的问题。

+0

谢谢阿伦先生我明白你的观点,但是“JSON”是什么? – Nezarov 2015-03-19 03:34:08

+0

JSON是一种替代数据格式。它比XML更新,并且由于其简单性而获得了很多人气。 Flash支持原生JSON解析和编码,与XML类似(尽管它没有E4X查询语法)。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html – Aaron 2015-03-19 03:36:42

+0

非常感谢,我认为这是一个很长的故事,我的意思是JSON,我必须弄清楚,但不是现在:P – Nezarov 2015-03-19 03:46:24

相关问题