Actionscript3使用变量解析XML节点路径

时间:2015-07-21 07:01:25

标签: xml actionscript-3

是否可以在Actionscript 3中使用XML节点查询中的变量?

鉴于以下rss Feed结构:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
  <item>
     <media:content url="http://www.example.com/test.jpg" type="image/jpeg" height="683" width="1024" />
     <media:content url="http://www.example.com/test2.jpg" type="image/jpeg" height="683" width="1024" />
  </item>
</channel>
</rss>

以下代码按预期工作,显示媒体命名空间中第一个内容节点的url属性值:

var nsAttribute:String = 'media';
var nodeName:String = 'content';
var holder:String = 'item';
var imagePathAttribute = 'url';
// Pull the namespace attribute value from the xml declaration
var ns:String = rssXML.namespace(nsAttribute);
// Make a namespace instance based on the xpl namespace's URI
var imagePathNameSpace:Namespace = new Namespace( ns );

trace ( rssXML.channel.child(holder).imagePathNameSpace::content[0].@url );

返回预期结果:

http://www.example.com/test.jpg

但是,当我在路径节点中使用变量时,出现错误。

trace ( rssXML.channel.child(holder).imagePathNameSpace::nodeName[0].@imagePathAttribute );

我收到的错误是:

TypeError: Error #1010: A term is undefined and has no properties.

可能是因为它找不到任何索引值,因为路径返回一个空字符串。如果我从路径中删除索引部分“[0]”,它将返回一个空字符串。

那么如何在xml查询中使用变量?我试图这样做的原因是为了使我正在进行的类可扩展性足以让我们需要做的就是设置类的属性,因此它可以使用不同的rss feed类型而不必硬 - 每个特定Feed的代码。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要做的是:

var node:XML = rssXML.channel.child(holder).imagePathNameSpace::content[0];
trace(node.attribute(imagePathAttribute));

您可以使用XML对象方法直接操作属性和节点名称。使用它,您可以为函数提供变量。

More informations are available here