0

所以我在 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>
4

2 回答 2

0

您可以将默认命名空间设置为空,以便使用 e4x,而无需通过以下代码指定命名空间:var xml:XML = Some text

    var ns:Namespace = xml.namespace("");
    default xml namespace = ns;
    trace(xml.instructions.toString()); //output "Some text"
于 2013-01-13T19:50:33.690 回答
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);
}  

有关更多信息,请参阅此页面

命名空间用于分隔或识别数据。在 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"
}
于 2013-01-13T19:24:23.083 回答