转自http://www.flashshe.com/blog/post/21.html
如果要在Flash中使用外部XML文档,只需通过XML类的XML.load()方法载入外部XML文档即可。但是在Flex中却不能这样,那怎么办呢?下面就为大家介绍三种方法。
假设外部XML文档内容如下(文件名称为 test.xml):
<?xml version="1.0" encoding="utf-8"?>
<root>
<news>
<title>one</title>
<data>1</data>
</news>
<news>
<title>two</title>
<data>2</data>
</news>
</root>
并且test.xml文件和我们将要建立的MXML文件在同一目录下。
一、使用 标签
使用文本编辑器或者flex builder建立如下的MXML文档:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" initialize="initApp()">
<mx:Script>
<![CDATA[
function initApp(){
myText.text = "有" + myXML.childNodes.length + "条信息。";
myText.text += "第一条信息标题为:" + myXML.firstChild.firstChild.firstChild.nodeValue;
}
]]>
</mx:Script>
<mx:XML id="myXML" source="test.xml" />
<mx:Text id="myText" />
</mx:Application>
如果你在Flash中使用过XML,我相信上面的代码对于你来说一目了然,没有任何解释的必要。
运行此MXML文档,可以看到Text组件的内容为:有2条信息。第一条信息标题为:one。
二、使用 标签
将上面的MXML文档稍作修改:
1、把“”换成“”;
2、把initApp()函数修改为
function initApp(){
var temp:Object = myModel.news;
myText.text = "有" + temp.length + "条信息。";
myText.text += "第一条信息标题为:" + temp[0].title;
}
运行此MXML文档,可以看到Text组件的内容为:有2条信息。第一条信息标题为:one。
当使用标签时,Flex将外部XML文档转换成对象,而不再把它看成是一个XML文件。
将test.xml转换成对象后,此对象相当于:
root = [{title:"one",data:"1"},{title:"one",data:"1"}];
三、使用 标签
这种方法我并不推荐使用,因为当第一次运行MXML文档后,外部XML文件会放入到客户机的缓存中,
当你的服务器上的XML文件更新后在客户端却不能马上进行相应的更新,因为你客户端的网页从缓存中读入了旧的XML文件。
在此我只提供MXML文件,不会做解释,感兴趣的读者可自行研究。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" initialize="initApp()">
<mx:Script>
<![CDATA[
function initApp(){
hs_ima.send();
}
function onLoad(Void):Void{
var myXML:Object = hs_ima.result;
//然后你可以把myXML当作一个XML对象来使用,像介绍的第一种方法一样
myText.text = "有" + myXML.childNodes.length + "条信息。";
myText.text += "第一条信息标题为:" + myXML.firstChild.firstChild.firstChild.nodeValue;
}
]]>
</mx:Script>
<mx:HTTPService id="hs_ima" url="test.xml" useProxy="false" result="onLoad()" resultFormat="xml" showBusyCursor="true" />
<mx:Text id="myText" />
</mx:Application>
如果要在Flash中使用外部XML文档,只需通过XML类的XML.load()方法载入外部XML文档即可。但是在Flex中却不能这样,那怎么办呢?下面就为大家介绍三种方法。
假设外部XML文档内容如下(文件名称为 test.xml):
<?xml version="1.0" encoding="utf-8"?>
<root>
<news>
<title>one</title>
<data>1</data>
</news>
<news>
<title>two</title>
<data>2</data>
</news>
</root>
并且test.xml文件和我们将要建立的MXML文件在同一目录下。
一、使用 标签
使用文本编辑器或者flex builder建立如下的MXML文档:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" initialize="initApp()">
<mx:Script>
<![CDATA[
function initApp(){
myText.text = "有" + myXML.childNodes.length + "条信息。";
myText.text += "第一条信息标题为:" + myXML.firstChild.firstChild.firstChild.nodeValue;
}
]]>
</mx:Script>
<mx:XML id="myXML" source="test.xml" />
<mx:Text id="myText" />
</mx:Application>
如果你在Flash中使用过XML,我相信上面的代码对于你来说一目了然,没有任何解释的必要。
运行此MXML文档,可以看到Text组件的内容为:有2条信息。第一条信息标题为:one。
二、使用 标签
将上面的MXML文档稍作修改:
1、把“”换成“”;
2、把initApp()函数修改为
function initApp(){
var temp:Object = myModel.news;
myText.text = "有" + temp.length + "条信息。";
myText.text += "第一条信息标题为:" + temp[0].title;
}
运行此MXML文档,可以看到Text组件的内容为:有2条信息。第一条信息标题为:one。
当使用标签时,Flex将外部XML文档转换成对象,而不再把它看成是一个XML文件。
将test.xml转换成对象后,此对象相当于:
root = [{title:"one",data:"1"},{title:"one",data:"1"}];
三、使用 标签
这种方法我并不推荐使用,因为当第一次运行MXML文档后,外部XML文件会放入到客户机的缓存中,
当你的服务器上的XML文件更新后在客户端却不能马上进行相应的更新,因为你客户端的网页从缓存中读入了旧的XML文件。
在此我只提供MXML文件,不会做解释,感兴趣的读者可自行研究。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" initialize="initApp()">
<mx:Script>
<![CDATA[
function initApp(){
hs_ima.send();
}
function onLoad(Void):Void{
var myXML:Object = hs_ima.result;
//然后你可以把myXML当作一个XML对象来使用,像介绍的第一种方法一样
myText.text = "有" + myXML.childNodes.length + "条信息。";
myText.text += "第一条信息标题为:" + myXML.firstChild.firstChild.firstChild.nodeValue;
}
]]>
</mx:Script>
<mx:HTTPService id="hs_ima" url="test.xml" useProxy="false" result="onLoad()" resultFormat="xml" showBusyCursor="true" />
<mx:Text id="myText" />
</mx:Application>