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

Dynamic Filereference Load() of XML Files and add to XMListCollection

您好,我在 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. 如果我 select 我的 Filereferncelist 中有很多对象,他只加载第一个项目 select ed 并且项目被添加到 xml_list。顺便提一句。在数据提供者的列表中,我只想看到第一个节点(例如 xml.name),但是我应该将它们从 xmllistcollection 中取出吗?我认为唯一的方法是使用循环。

啊好的,它可以工作,但是我如何从列表对象(数据提供者)中加载的 xml 中获取 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 元素看起来像这样,但不知道如何实现,也没有在网络上找到任何示例,顶部应该保留名称 xml_list.maindata.name,底部是一个简单的操作示例( 1+1) 或 (@value x+ @value y)

http://imgur.com/VOAjLNu

你的代码中的错误是你每次 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;
}

希望能帮到你。