2013-01-13 69 views
0

所以我有我的XML文件加载as3,我可以看到它正确加载,它是正确的文件,因为我可以跟踪它,但是当我尝试跟踪特定节点时,我的输出窗口仍然空着。这里是我的代码:无法访问as3中的XML节点

var _textes:XML; 
loader = new URLLoader(); 
requete = new URLRequest("texte_fr.xml"); 
loader.load(requete); 
loader.addEventListener(Event.COMPLETE, finChargement); 

function finChargement(pEvt:Event){ 
    _textes= new XML(pEvt.target.data); 
} 

如果我跟踪_textes,我可以看到我所有的XML代码,但只要我尝试跟踪我的XML文件中的一个节点,我什么都看不到。例如,如果我试图追踪_textes.instructions,则什么都不会出现。我究竟做错了什么? 这里是我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<textes version="1" xmlns="http://xspf.org/ns/0/"> 
<instructions> 
    Some text 
</instructions> 
<niveau1> 
    <reussi> 
     Some other text 
    </reussi> 
    <fail> 
     Some other text 
    </fail> 
</niveau1> 
<niveau2> 
    <reussi> 
     Some other text 
    </reussi> 
    <fail> 
     Some other text 
    </fail> 
</niveau2> 
<niveau3> 
    <reussi> 
     Some other text 
    </reussi> 
    <fail> 
     Some other text 
    </fail> 
</niveau3> 
<perdu> 
    Some other text 
</perdu> 
<general> 
    Some other text 
</general> 
<boutons> 
    Some other text 
</boutons> 
</textes> 

回答

0

编辑: @fsbmain打我给它一个妥善的解决办法,而我是编辑我的回答:)这里是我的修订答案反正...

你没有获取该节点的内容,因为您没有使用xml文档的名称空间引用该节点。

这是你应该如何访问XML节点:

function finChargement(pEvt:Event){ 
    _textes= new XML(pEvt.target.data); 
    // The namespace in your xml document: 
    var ns:Namespace = new Namespace("http://xspf.org/ns/0/"); 
    default xml namespace = ns; 
    trace(_textes.instructions); 
} 

欲了解更多信息请参阅this page

命名空间用来分隔或识别数据。在XML中,它们被用于 以将一个或多个节点与某个URI(统一资源 标识符)相关联。具有名称空间的元素可以具有与其他标记相同的标记名称,但由于它们与URI的关联关系而仍然与它们分开。

下面是一个例子:

说你有这个XML数据:

<?xml version="1.0" encoding="utf-8"?> 
<textes> 
    <instructions xmlns="http://xspf.org/ns/0/"> 
     Node 1 
    </instructions> 
    <instructions xmlns="http://xspf.org/ns/1/"> 
     Node 2 
    </instructions> 
</textes> 

如果您访问使用的第一个节点的命名空间“指令”节点,你会得到第一节点的内容。

function finChargement(pEvt:Event){ 
    _textes= new XML(pEvt.target.data); 
    var ns:Namespace = new Namespace("http://xspf.org/ns/0/"); 
    default xml namespace = ns; 
    trace(_textes.instructions); 
    // Will output "Node 1" 
} 

如果使用第二个节点的命名空间,你会得到第二个节点的内容:

function finChargement(pEvt:Event){ 
    _textes= new XML(pEvt.target.data); 
    var ns:Namespace = new Namespace("http://xspf.org/ns/1/"); 
    default xml namespace = ns; 
    trace(_textes.instructions); 
    // Will output "Node 2" 
} 
+0

请参阅我的修订答案。 – bwroga

0

您可以设置默认的命名空间,以便使用E4X清空无这段代码指定命名空间: var xml:XML =部分文字

var ns:Namespace = xml.namespace(""); 
    default xml namespace = ns; 
    trace(xml.instructions.toString()); //output "Some text"