The*_*Man 0 apache-flex flash e4x actionscript-3 flash-cs4
在下面的代码块中,如果我调试并查看它显示为XMLList的var obj.theID.即使代码跟踪正确,我觉得它应该是一个字符串而不是XMLList.
所以我的问题是如何让它分配字符串而不是XMLList?
var myXML:XML = new XML(
<panels>
<panel id="1"/>
<panel id="2"/>
<panel id="3"/>
</panels>
);
var panels:XMLList = new XMLList( myXML.children());
trace( panels.length()); // is as expected
for each( var panel:XML in (new XMLList( myXML.children())) ){
var obj:Object = new Object( );
// XMLList is assigned here but why? and how can I make it a string?
obj.theID = panel.@id;
// id is traced as expected but apparently it is just converting the XMLlist to a string.
trace( panel.@id)
}
Run Code Online (Sandbox Code Playgroud)
AS3 xml解析器只读取任何本机xml内容,将属性或节点数据作为字符串读取,并且可以在没有类型转换的情况下使用.这是使xml在flash中如此方便的事情之一.但是如果你检查类型,它将作为XML返回,除非你专门强制转换它(这实际上是toString()的作用).
for each( var panel:XML in panels ){
var obj:Object = new Object( );
obj.theID = panel.@id;
// the native type is xml, tho can be read without conversion as a string
trace( typeof obj.theID) // type:xml
trace( typeof panel.@id) // type:xml
// simply cast it to string
obj.theIDString = String(panel.@id);
trace( typeof obj.theIDString) // type:string
}
Run Code Online (Sandbox Code Playgroud)
- 更新 -
值得注意的是= XML和XMLlist可以并且通常可以互换使用.他们每个人都可以使用类似的方法,但有一个重要的区别.XML可能只有一个根节点,而XMLlist可能有几个.这在正常使用中可能没什么区别,但是根据传入的xml的结构,可能是一个关键的区别.通常,我只使用XML类型.这是一篇关于xml vs xmllist的好文章.
干杯