as3 namespace - 获取一个带减号的属性

时间:2011-07-11 20:57:46

标签: actionscript-3 xml-namespaces e4x smil

  

可能重复:
  e4x / as3: How to access a node with a dash in its name.

我已将XML的命名空间设置为使用SMIL,我可以通过这种方式提取元素的src属性:

得到“这是一些网址”的

my.node.@src

但是,我有另一个名为'system-bitrate'的attr。由于减号,我无法做@system-bitrate所以我尝试了我通常做的my.node.attribute('system-bitrate')无法正常工作。

奇怪的是,甚至my.node.attribute('src')都没有效果。我怀疑这是由于命名空间?那么如何使用ny.node.attribute获取属性?

唯一有效的是my.node.attributes()[1]我知道这不是“正确的方式”,所以我希望有人可以启发我!

仅供参考我正在使用SMIL个文件

**编辑**

这是我正在使用的XML所需的命名空间: default xml namespace = new Namespace('http://www.w3.org/2001/SMIL20/Language');

我正在使用的XML示例:

<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta name="title" content="Live"/>
  </head>
  <body>
    <switch>
      <video src="myStreamName" system-bitrate="200000"/>
    </switch>
  </body>
</smil>

** DennisJaaman的代码示例**

default xml namespace = new Namespace('http://www.w3.org/2001/SMIL20/Language');

var xml:XML = XML(event.target.data);
for each(var o:XML in xml.body['switch'].video) {
    if(!hs) hs = o;
    else {
        trace(o.attributes()[1]); // works
                trace(o.@url); // doesn't work either (makes me wonder about NS issues
                trace(o['@system-bitrate']); // doesn't work
                trace(o.attribute('@system-bitrate') // doesn't work
                // etc etc, I just left a few in here
    }
}

3 个答案:

答案 0 :(得分:4)

尝试使用方括号,如下例所示:

default xml namespace = new Namespace("http://www.w3.org/2001/SMIL20/Language");
var xmlSmpl:XML=<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta name="title" content="Live"/>
  </head>
  <body>
    <switch>
      <video src="myStreamName" system-bitrate="200000"/>
    </switch>
  </body>
</smil>;

trace (xmlSmpl.body['switch']['video']['@system-bitrate']);

答案 1 :(得分:2)

看哪! QName的力量!

my.node.attribute( 
    new QName( 'http://www.w3.org/2001/SMIL20/Language', 'system-bitrate' ) 
)

关于属性(和后代,以及子...)的事情是它的参数是类型*(匿名)。这是因为它实际上不是String,它在后台被强制为QName(没有URI)。这意味着您在上面的URI下搜索某些内容的默认URI。

让我知道上面的代码是如何解决的。

答案 2 :(得分:0)

看看这篇文章:

e4x / as3: How to access a node with a dash in its name

****** ****编辑:

并使用以下表示法来获取包含 - (破折号)

的XML属性
trace("Video system-bitrate: " + my.node.video["@system-bitrate"]);

这些不起作用:

trace("Video system-bitrate: " + my.node.video.@["system-bitrate"]);
trace("Video system-bitrate: " + my.node.video.attribute("@system-bitrate"));

有关详细信息,请查看LiveDocs

干杯