可能重复:
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
}
}
答案 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
干杯