我将一些数据从xml文件加载到flash项目作为值..数字运行良好但布尔值(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].@VALUE;
lock_cb.selected = myXML.SET[1].@VALUE;
trace(myXML.SET[1].@VALUE);
};
输出:false
但是lock_cb.selected仍然是真的! 感谢
答案 0 :(得分:0)
字符串false
的计算结果为布尔值true,您可以通过将其与字符串true
进行比较将其转换为布尔值。
尝试
lock_cb.selected = myXML.SET[1].@VALUE === 'true';
答案 1 :(得分:0)
我相信你遇到XML type conversion的问题。请记住,所有E4X查询都将返回XML
或XMLList
个对象,并且只能隐式转换为Strings
。换句话说,VALUE
是字符串"false"
而不是布尔值false
。
但是,您可以使用比较将其转换为布尔值:
var value:Boolean = myXML.SET[1].@VALUE == 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].@VALUE == "true";
数字工作的原因是因为将String
分配给Number
会隐式地将字符串解析为数字。
是的,隐式转换会让事情变得混乱。
作为最后一点,这可能超出了您现在可以或想要做的事情,但JSON支持布尔值,数字和null,因此您不会遇到同样的问题。