3

可能重复:
e4x / as3:如何访问名称中带有破折号的节点。

我已经为我的 XML 设置了命名空间以使用 SMIL,并且我能够以这种方式提取元素的 src 属性:

my.node.@src得到“这是一些 URL”

但是,我有另一个称为“系统比特率”的属性。由于减号,我不能这样做@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
    }
}
4

3 回答 3

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']);
于 2011-07-11T22:10:19.173 回答
2

看哪!QName 的力量!

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

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

让我知道上面的代码是如何工作的。

于 2011-07-13T17:47:00.710 回答
0

看看这篇文章:

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

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

并使用以下表示法获取包含 - (破折号)的 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

干杯

于 2011-07-13T14:21:39.977 回答