e4x / as3:如何访问名称中带破折号的节点

时间:2011-03-15 20:10:04

标签: xml actionscript-3 e4x

as3中的e4x实现似乎无法处理其中包含破折号的节点名称。 musicbrainz api使用名为artist-list的节点返回xml,我似乎无法让它访问该节点。

来自http://musicbrainz.org/ws/1/artist/?type=xml&name=dr%20dog的示例:

<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#" xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
    <artist-list offset="0" count="1090">
        <artist type="Group" id="e9aed5e5-ed35-4244-872e-194862290295" ext:score="100">
        </artist>
    </artist-list>
</metadata>

如果我尝试像myXml.artist-list那样访问它,我会收到编译时错误:

Error: Access of undefined property list.

有人知道解决方法吗?

- 编辑:完整来源 -

var l:URLLoader = new URLLoader();
    l.load(new URLRequest("http://musicbrainz.org/ws/1/artist/?type=xml&name=dr%20dog"));
    l.addEventListener(Event.COMPLETE, function(e:Event) {
        var myXml:XML = XML(e.target.data);
        trace(myXml.artist-list)
    });

2 个答案:

答案 0 :(得分:3)

使用以下两种语法添加了一个工作示例:http://wonderfl.net/c/hyuG

您可以使用myXml["my field"]表示法获取字段,因为您的xml中必须指定namespace,其中一种方法是:

var ns:Namespace=new Namespace("http://musicbrainz.org/ns/mmd-1.0#")
trace(myXml.ns::["artist-list"])

另一种方法是设置默认命名空间:

var ns:Namespace=new Namespace("http://musicbrainz.org/ns/mmd-1.0#")
default xml namespace=ns
trace(xml["artist-list"])

答案 1 :(得分:1)

您可以使用'child'

访问它
xml.child("artist-list")

将返回XMLList。不像普通的e4x那样整洁,但这就是它的方式..