如何在as3中使用xml中的布尔值(true,false)?

时间:2015-03-19 02:54:03

标签: xml actionscript-3 flash

我将一些数据从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仍然是真的! 感谢

2 个答案:

答案 0 :(得分:0)

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

尝试

lock_cb.selected = myXML.SET[1].@VALUE === 'true';

答案 1 :(得分:0)

我相信你遇到XML type conversion的问题。请记住,所有E4X查询都将返回XMLXMLList个对象,并且只能隐式转换为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,因此您不会遇到同样的问题。