所以我将我的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>
答案 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"