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)
你的代码中的错误是你每次 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;
}
希望能帮到你。
您好,我在 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)
你的代码中的错误是你每次 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;
}
希望能帮到你。