首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XML属性解析为XMLList

将XML属性解析为XMLList
EN

Stack Overflow用户
提问于 2011-05-19 08:29:07
回答 3查看 5.7K关注 0票数 0

在下面的代码块中,如果我调试并查看var obj.theID,它将显示为一个XMLList。尽管代码可以正确跟踪,但我觉得它应该是一个字符串,而不是XMLList。

所以我的问题是,如何才能让它分配一个字符串而不是XMLList?

代码语言:javascript
复制
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)
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-19 09:21:10

xml解析器只需读取任何原生AS3内容,无论是属性数据还是节点数据,都可以作为字符串使用,而无需进行类型转换。这是使xml在flash中变得如此方便的一件事。但是如果您检查该类型,它将作为XML返回,除非您专门转换它(这基本上就是toString()所做的)。

代码语言:javascript
复制
    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
}

-更新--

值得一提的是= XML和XMLlist可以并且经常可以互换使用。他们每个人都可以访问一组类似的方法,但有一个重要的区别。XML可能只有一个根节点,而XMLlist可能有多个根节点。这在正常使用中可能没有多大区别,但根据传入xml的结构,这可能是一个关键区别。通常,我只使用XML类型。这里有一篇关于xml vs xmllist的好文章。

干杯

票数 5
EN

Stack Overflow用户

发布于 2011-05-19 09:16:33

使用toString()获取该值。

示例:

代码语言:javascript
复制
var xml:XML = <thing>hello</thing>;

trace(xml.toString()) //hello

你的新代码:

代码语言:javascript
复制
var myXML:XML =
<panels>
    <panel id="1" />
    <panel id="2" />
    <panel id="3" />
</panels>;

var panels:XMLList = myXML.children();

var panel:XML;
for each(panel in panels)
{
    var obj:Object =
    {
        stringID: panel.@id.toString(),
        normalID: panel.@id
    };

    trace(typeof(obj.stringID), obj.stringID); //string
    trace(typeof(obj.normalID), obj.normalID); //xml
}
票数 3
EN

Stack Overflow用户

发布于 2011-05-19 09:27:32

这是ActionScript使用的E4X解析器的一部分。

XML元素的子节点始终包装在XMLList中。即使an元素只有一个子元素或属性。

在对象上获取字符串最简单方法是使用

var obj:Object =新建Object( );obj.theID = panel.@id.toString();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6052536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档