无法访问as3中的XML节点

时间:2013-01-13 18:55:03

标签: xml actionscript-3

所以我将我的XML文件加载到as3中,我可以看到它已正确加载并且它是正确的文件,因为我可以跟踪它但是当我尝试跟踪特定节点时,我的输出窗口仍为空。这是我的代码:

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>

2 个答案:

答案 0 :(得分: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"
}

答案 1 :(得分:0)

您可以将默认命名空间设置为空,以便在不使用此代码指定命名空间的情况下使用e4x:         var xml:XML =一些文本

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