如何在 FLex 中包含和使用 E4x 获取 XML 值
How to include and use E4x to get XML values in FLex
我在 UploadCompleteData() 中收到来自 servlet 的 xml 响应,我需要在 flex 中使用 E4x 获取 XML 的值。
我的代码如下:
//我们得到的函数 xml
function OnCompleteupload(event:Event):void
{
xml:XML = event.event.currentTarget.data(); // this will give me the Xml
//here I need to get the values from xml using E4x
}
// XML 响应类似于
<Students>
<Student>
<rollNo>50</rollNo>
<totalMarks>100</totalMarks>
</Student>
</Students>
我需要获得类似于 xml[0].rollNo 的值。我是初学者,所以请提供一些建议,并告诉我是否需要将任何 jar 包含在我的项目中才能使用 E4X。
提前致谢
首先,请注意您的访问 URLLoader's data is a property,而不是 method()。在 actionscript 3 中,与 java 不同,您可以拥有 getter 和从 java 角度看起来像 public 变量的设置器,但它们确实在幕后调用函数。
所以你的代码应该是
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 的有趣之处在于它内置于语言中,因此您不仅不需要库(编译的 as3 库是 .swc 文件,而不是 java .jar),而且您可以内联xml,所以你想测试一个快速片段,这会起作用:
var xml:XML = <Students>
<Student>
<rollNo>50</rollNo>
<totalMarks>100</totalMarks>
</Student>
</Students>;
回到你的主要问题,访问rollNo
,这个节点嵌套在<Student/>
节点(这是一个XMLList...你以后可能有多个学生节点),它又嵌套在 <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 提供了一些关于 XML 和 E4X in actionscript 3 的简单易懂的视频教程:
更新
根据您的评论,您正在处理 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
我在 UploadCompleteData() 中收到来自 servlet 的 xml 响应,我需要在 flex 中使用 E4x 获取 XML 的值。 我的代码如下:
//我们得到的函数 xml
function OnCompleteupload(event:Event):void
{
xml:XML = event.event.currentTarget.data(); // this will give me the Xml
//here I need to get the values from xml using E4x
}
// XML 响应类似于
<Students>
<Student>
<rollNo>50</rollNo>
<totalMarks>100</totalMarks>
</Student>
</Students>
我需要获得类似于 xml[0].rollNo 的值。我是初学者,所以请提供一些建议,并告诉我是否需要将任何 jar 包含在我的项目中才能使用 E4X。
提前致谢
首先,请注意您的访问 URLLoader's data is a property,而不是 method()。在 actionscript 3 中,与 java 不同,您可以拥有 getter 和从 java 角度看起来像 public 变量的设置器,但它们确实在幕后调用函数。
所以你的代码应该是
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 的有趣之处在于它内置于语言中,因此您不仅不需要库(编译的 as3 库是 .swc 文件,而不是 java .jar),而且您可以内联xml,所以你想测试一个快速片段,这会起作用:
var xml:XML = <Students>
<Student>
<rollNo>50</rollNo>
<totalMarks>100</totalMarks>
</Student>
</Students>;
回到你的主要问题,访问rollNo
,这个节点嵌套在<Student/>
节点(这是一个XMLList...你以后可能有多个学生节点),它又嵌套在 <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 提供了一些关于 XML 和 E4X in actionscript 3 的简单易懂的视频教程:
更新 根据您的评论,您正在处理 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