XML文件的动态文件引用Load()并添加到XMListCollection

时间:2015-07-12 04:18:28

标签: xml actionscript-3 flex flex4

嗨我在as3中遇到问题我想在循环中加载文件引用中的几个xml文件。我的想法是将它们加载到xml变量中并将它们添加到XmllistCollection中,等等,但是xml变量被覆盖,因此我的XmllistCollection中只有1 xml。

编辑:

我的新代码:

    public var daten:FileReferenceList;
    public var file:FileReference;
    public var xml:XML;
    private var xml_list:XMLListCollection;

public function reading(event:MouseEvent):void{
            daten=new FileReferenceList();
            var filter:FileFilter = new FileFilter("XML Dateien", "*.xml");
            daten.browse([filter]);

            daten.addEventListener(Event.SELECT, selectDaten);
        }


        private function selectDaten(event:Event):void{

            for(var i:Number = 0; i < daten.fileList.length; i++) {
                file = daten.fileList[i];
                file.addEventListener(Event.COMPLETE,datenLoaded);
                file.load();

            }

        }


        public function datenLoaded(event:Event):void{
        xml_list=new XMLListCollection();
        xml_list.addItem(new XML(event.target.data));
        gui.list.dataProvider=(xmllist.getallitem.nodes);
        }

        public function click(event:MouseEvent):void{

        trace(xml_list.getItemAt(0));



        }

我按照你的方式尝试了但是当我跟踪(xml_list.length)时我告诉我1.如果我在Filereferncelist中选择了很多对象,他只加载选中的第一个项目,并将项目添加到xml_list。顺便说一句。在数据提供者的列表上我只想看到第一个节点(例如xml.name),但是我应该从xmllistcollection中获取它们,这是我认为循环的唯一方式。

啊确定它有效,但是如何从列表对象(dataprovider)中加载的xmls获取xml.name?例如,在xml_list

中加载2 xmls
 <?xml version="1.0" encoding="UTF-8"?>
<xml>
<maindata>
    <name>murph.mp3</name>
</maindata>
<files>
    <filepart>
        <value x="20" y="15">
            <element>155</element>
        </value>
    </filepart>
</files>
</xml>

我想让我的List元素看起来像这样但不知道如何实现并且没有在web上找到任何示例应保留名称xml_list.maindata.name并在底部操作以便于此示例(1+ 1)或(@value x + @value y)

http://imgur.com/VOAjLNu

1 个答案:

答案 0 :(得分:0)

您的代码中的错误是您每次XMLListCollection初始化(覆盖),所以当然最后您只会获得最后添加的项目,因此您的代码可能是这样的:

function datenLoaded(event:Event):void
{               
    xml_list.addItem(XML(event.target.data));

    // to get an XML element ( test.name ) :
    xml_list.addItem(XML(event.target.data).name);

    // here your don't need an ArrayList
    // you can use the XMLListCollection as a data provider for the list
    list.dataProvider = xml_list;
}

编辑:

要验证您是否已添加名称,例如,您可以使用Object存储您的姓名以验证新名称:

private var names:Object = {};

然后你的功能可以是这样的:

function datenLoaded(event:Event):void 
{
    var xml:XML = XML(event.target.data);
    var name:String = xml.maindata.name;

    // if we don't have already added this name, so add it
    if(!names[name]){
        names[name] = name;
        xml_list.addItem(XML(event.target.data).maindata.name);
    }               
    list.dataProvider = xml_list;
}

希望可以提供帮助。