Actionscript 3 如何在FLex中包含并使用E4x获取XML值

Actionscript 3 如何在FLex中包含并使用E4x获取XML值,actionscript-3,apache-flex,flex4,flex3,e4x,Actionscript 3,Apache Flex,Flex4,Flex3,E4x,我在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

我在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>

50
100
我需要获取类似于xml[0]的值。我是一个初学者,所以请给出一些建议,并告诉我是否有任何jar,我需要包括在我的项目中,以使用E4X


首先,请注意您的访问权限,而不是方法()。在ActionScript3中,与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文件的3个库,而不是java.jar),而且可以内联xml,因此要测试一个快速代码段,这将起作用:

var xml:XML = <Students>
  <Student>
      <rollNo>50</rollNo>
      <totalMarks>100</totalMarks>
  </Student>
</Students>;
如果您想了解更多信息,Lee Brimelow在actionscript 3中提供了两个关于XML和E4X的简单视频教程:

  • 更新 根据您的评论,您正在处理。上面的ActionScript 3高级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);
    
    var ns:Namespace=新名称空间(“urn:xxx:proj:ken”);
    var-xml:xml=20425;
    //通过命名空间访问
    跟踪(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
    
    var ns:Namespace=新名称空间(“urn:xxx:proj:ken”);
    默认xml名称空间=ns;
    var-xml:xml=20425;
    跟踪(xml.Student[0].rollNo)//注意,在访问每个节点之前,不需要使用ns::因为上面设置了默认的xml名称空间
    
    Hi-George谢谢你的回答,但是当我使用xml时,我会得到null。学生[0]我猜这是在你的
    onCompletePload()函数中,对吗?如果是这样,请首先尝试以下操作:
    trace(xml.toXMLString())
    。如果在这里得到null,则表示数据未正确转换为XML对象。如果没有得到null并看到实际的XML文档,请确保结构与预期相符。你能把更新后的
    发布到CompletePload
    函数和跟踪结果上吗?是的,我能在xml之后看到xml。下面是我在这之后得到的结果:20 425见上面更新的答案。请花时间阅读并理解提供的文档/资源。如果答案有用,请投票和/或标记答案。
    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