首先,请注意您的访问权限URLLoader's data is a property,而不是method()。在 actionscript 3 中,与 java 不同的是,您可以拥有从 java 角度看类似于公共变量的 getter 和 setter,但它们确实在幕后调用函数。
所以你的代码应该是这样的
function OnCompleteupload(event:Event):void
{
xml:XML = new XML(event.event.currentTarget.data); // this will give me the Xml
//here I need to get the values from xml using E4x
}
E4X 的有趣之处在于它内置在语言中,因此您不仅不需要库(编译为 .swc 的库是 .swc 文件,而不是 java .jar),而且您可以内联 xml,所以您想要测试一个快速的 sn-p,这将起作用:
var xml:XML = <Students>
<Student>
<rollNo>50</rollNo>
<totalMarks>100</totalMarks>
</Student>
</Students>;
回到你的主要问题,访问rollNo,这个节点嵌套在<Student/>节点中(这是一个XMLList...你以后可能有多个Student节点),而后者又嵌套在里面<Student/> 节点:你的根节点。
所以从上到下,xml.Student 将带您到<Student/> 子 XMLList,您可以从中访问第一个元素,使用数组访问表示法:xml.Student[0]。此时,您再向下钻取一层至 rollNo 节点:
var xml:XML = <Students>
<Student>
<rollNo>50</rollNo>
<totalMarks>100</totalMarks>
</Student>
</Students>;
trace(xml.Student[0].rollNo);//prints 50 to the console/output
如果您想了解更多信息,Lee Brimelow 在 actionscript 3 中有几个关于 XML 和 E4X 的易于学习的视频教程:
- ActionScript 3 XML Basics
- ActionScript 3 Advanced XML
更新
根据您的评论,您正在处理XML Namespaces。上面的 ActionScript 3 Advanced XML 教程也涵盖了这一点。
你可以这样:
var ns:Namespace = new Namespace("urn:xxx:proj:ken");
var xml:XML = <Students xmlns="urn:xxx:proj:ken"> <Student> <rollNo>20</rollNo> <totalMarks>425</totalMarks> </Student> </Students>;
//access via namespace
trace(xml.ns::Student[0].ns::rollNo);
这可能会有点冗长,但如果您在同一个文档中有更多 XML 命名空间,它会很灵活。
如果您的 XML 仅使用这一个命名空间,您可以将其设置为默认的 XML 命名空间:
var ns:Namespace = new Namespace("urn:xxx:proj:ken");
default xml namespace = ns;
var xml:XML = <Students xmlns="urn:xxx:proj:ken"> <Student> <rollNo>20</rollNo> <totalMarks>425</totalMarks> </Student> </Students>;
trace(xml.Student[0].rollNo);//notice you don't need to use ns:: before accessing each node as the default xml namespace is set above