使用ActionScript 3读取XML节点

时间:2013-06-04 20:54:37

标签: xml actionscript-3 parsing namespaces xml-namespaces

我有一个XML文件(简化如下),我无法读取节点的内容:

<List xmlns="Default" xmlns:st="ST" xmlns:lc="LC">
  <Main>
    <st:ID>10</st:ID>
    <Info>
        <st:One>One</st:One>
        <st:Two>Two</st:Two>
        <st:Three>Three</st:Three>
    </Info>
  </Main>
</List>

如果我尝试:trace(xmlOne.Main.Info.One.toString());它不会返回任何内容。我知道它与命名空间有关但是我不创建XML而不能删除它们。我试过了:

namespace theDefault = "Default";
use namespace theDefault;

但实际上没有运气读取节点内容。那么在不改变XML的情况下,读取节点内容的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您必须使用Namespace对象来访问命名空间下的节点。我在这里使用你的XML做了一个简单的例子:

var message:XML = <List xmlns="Default" xmlns:st="ST" xmlns:lc="LC">
  <Main>
    <st:ID>10</st:ID>
    <Info>
        <st:One>One</st:One>
        <st:Two>Two</st:Two>
        <st:Three>Three</st:Three>
    </Info>
  </Main>
</List>;

// First create the namespace objects for the namespaces used in the XML.
var defaultNS:Namespace = new Namespace('Default');
var stNS:Namespace = new Namespace('ST');

// Find and trace the value of the "One" node.
trace(message.defaultNS::Main.defaultNS::Info.stNS::One);

您需要在E4X节点名称前加上命名空间。要访问ID节点,您可以:

trace(message.defaultNS::Main.stNS::ID);

要获得整个Info节点,您可以这样做:

var info:XMLList = message.defaultNS::Main.defaultNS::Info;
trace(info);

有关AS3中XML命名空间的更多信息,请查看section on Namespaces in Senocular's XML tutorial