【问题标题】:e4x / as3: How to access a node with a dash in its namee4x / as3:如何访问名称中带有破折号的节点
【发布时间】:2011-03-15 20:10:03
【问题描述】:

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)
    });

【问题讨论】:

  • 对不起,它是 .ns::["xxxx"]

标签: xml actionscript-3 e4x


【解决方案1】:

使用两种语法添加了一个工作示例: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"])

【讨论】:

  • 尝试像上面那样设置命名空间给了我:TypeError: Error #1034: Type Coercion failed: cannot convert XML@8312da9 element &lt;metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#" xmlns:ext="http://musicbrainz.org/ns/ext-1.0#"&gt; to Namespace. 设置默认命名空间的代码会引发语法错误。
  • @greg 是的,我犯了一个错误,这是 myXml.ns:: 而不是 myXml::ns 。
  • 终于让它使用默认命名空间工作了。使用 xml.ns::["artist-list"].artist[0].name 会引发 a term is undefined... 错误。在一个类中设置默认 ns 是否会影响其他类中的 e4x?
【解决方案2】:

你可以用'child'访问它

xml.child("artist-list")

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

【讨论】:

  • 我试过 myXML.child("artist-list")XMLList(myXml.child("artist-list"))myXML.child("artist-list").artist.length()myXML.child("artist-list").child("artist").length(),但我什么也没得到。
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多