嗨我在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)
答案 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;
}
希望可以提供帮助。