我有一个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的情况下,读取节点内容的最佳方法是什么?
答案 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