可以简单地使用一个XML
对象的appendChild()
方法如下所示:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var xml1:XML = <rootNode>
<parentNode>
<childNode>1</childNode>
</parentNode>
</rootNode>;
var xml2:XML = <rootNode>
<parentNode>
<childNode>2</childNode>
</parentNode>
</rootNode>;
xml1.parentNode.appendChild(xml2.parentNode.childNode);
trace(xml1); // output: <rootNode>
// <parentNode>
// <childNode>1</childNode>
// <childNode>2</childNode>
// </parentNode>
// </rootNode>
}// end function
}// end class
}// end package
[UPDATE]
还可以简单地既XML
对象合并到一个XMLList
对象像下面:
var xmlList:XMLList = XMLList(xml1.toString().concat(xml2.toString())); // XMLList(xml1 + xml2)
trace(xmlList); // output: <rootNode>
// <parentNode>
// <childNode>1</childNode>
// </parentNode>
// </rootNode>
// <rootNode>
// <parentNode>
// <childNode>2</childNode>
// </parentNode>
// </rootNode>
[更新2]
我改写了您的应用程序(以及您的应用程序发布的部分),你可能想向你展示的方式采取:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.net.SharedObject;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class Main extends Sprite
{
private var _sharedObject:SharedObject;
private var _urls:Array;
private var _xmls:Vector.<XML>;
private var _xmlsLoaded:int;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_sharedObject = SharedObject.getLocal("questions");
_sharedObject.data.category = Category.BOTH;
_xmls = new Vector.<XML>();
switch(_sharedObject.data.category)
{
case Category.ONE: loadXml("xml/category1.xml"); break;
case Category.TWO: loadXml("xml/category2.xml"); break;
case Category.BOTH: loadXml("xml/category1.xml", "xml/category2.xml"); break;
}// end switch
}// end function
private function loadXml(...urls):void
{
_urls = urls;
for each(var url:String in urls)
{
var urlLoader:URLLoader = new URLLoader(new URLRequest(url));
urlLoader.addEventListener(Event.COMPLETE, onUrlLoaderComplete);
}// end function
}// end function
private function onUrlLoaderComplete(e:Event):void
{
_xmls.push(XML(URLLoader(e.target).data));
if (_urls.length == ++_xmlsLoaded) traceXMLList();
}// end if
private function traceXMLList():void
{
trace(getXMLList(_xmls)); // output: <category1>
// <question>question 1</question>
// <question>question 2</question>
// </category1>
// <category2>
// <question>question 1</question>
// <question>question 2</question>
// </category2>
}// end function
private function getXMLList(_xmls:Vector.<XML>):XMLList
{
var xmlList:XMLList = new XMLList();
for (var i:uint = 0; i < _xmls.length; i++)
xmlList += _xmls[i];
return xmlList;
}// end function
}// end class
}// end package
internal class Category
{
public static const ONE:String = "one";
public static const TWO:String = "two";
public static const BOTH:String = "both";
}// end class
我想我明白你要什么,但我很新的这个XML的东西。我会试试这个。谢谢。 – Rich 2011-05-06 01:45:47
我编辑了上面的代码以包含您的建议,但现在我得到两个“访问未定义的属性”错误myLoader和myLoader2,我不明白为什么。 – Rich 2011-05-06 10:35:32