关于Flash读取Xml数据,及后台交互实现方法的说明。

来源:互联网 发布:淘宝销量排名 编辑:程序博客网 时间:2024/05/16 13:56

首先讲的是xml的格式

<?xml version="1.0" encoding="utf-8"?>(注释:最好使用utf-8编码)
<格式1>
<格式2>
<分支 name="测试"/>
</格式2>
</格式1>

(注意:xml是标记语言。标记都可以自己定义)
那flash是怎么读取xml呢??
先用flash几个函数来调用xml
new XML()
参数
用来调用xml
my_xml.load(url)
参数
url 要加载的 XML 文档所位于的 URL。
my_sound.onLoad = function(success){
// 此处是您的语句
}
参数
success 如果 my_sound 已成功加载,则为布尔值 true,否则为 false。
加载xml的语句就这些了呵呵~~可是怎么读取xml内的数据呢~~~~~~
一般用到:
my_xml.childNodes
参数
无。
返回
一个数组。
说明
属性(只读);指定 XML 对象的子级组成的数组。
my_xml.attributes
参数
无。
返回
一个数组。
说明
属性;一个包含指定 XML 对象的所有属性的关联数组。
my_xml.nodeName
说明
属性;XML 对象的节点名称。
my_xml.firstChild
说明
属性(只读);计算指定的 XML 对象,并引用父级节点的子级列表中的第一个子级。
喂喂你这上面写些的什么东西~~~~~~我怎么看不大明白到底怎么用啊~~~(旁白)恩好
的这里我写个例子给你看~~~~~~
例子:
我上面不是写了一个xml呢(在加点东西)。
<?xml version="1.0" encoding="utf-8"?>
<格式1 name="测试">(注释:这是第一层)
abc
<格式2>(注释:这是第一层的第二层
<分支 name="测试"/>(注释:这是第一层中第二层中的第一层)
</格式2>
</格式1>
(最好用~~~专门的~~xml工具写,用记事本写不知道为什么出错郁闷)
那好先把这个保存为:dataangel.xml
//读取xml:
var angel=new XML();
angel.load(dataangel.xml);
angel.ignoreWhite = true;//忽略空白的文本节点
angel.onLoad = function(success){
//读取第一层中name的值
trace(angel.childNodes[0].attributes.name);//trace说明:“输出”面板中显示结果。
//读取第一层中的第二层中的第一层中的name值
trace(angel.childNodes[0].childNodes[1].childNodes[0].attributes.name);
//读取第一层的标签
trace(angel.childNodes[0].nodeName);
//读取第一层的第二层的标签
trace(angel.childNodes[0].childNodes[1].nodeName);
//读取第一层的第二层的的第一层中的标签
trace(angel.childNodes[0].childNodes[1].childNodes[0].nodeName);
//读取<格式1></格式1>之间的~~~~abc
trace(angel.childNodes[0].firstChild);
}

xml格式 两种写法
第一种
//声明省略,不影响flash读取
//<?xml version="1.0" encoding="iso-8859-1" ?>
//假设不声明XML格式,则必须存储成UTF-8格式,否则用IE打开XML文档 会出现无效字符等问题
<root>
  <body>
     <id>1</id> 
      <name>第一个</name>
      <property>绝对第一个</property>
  </body>
  <body>
      <id>2</id> 
     <name>第二个</name>
      <property>绝对第二个</property>
 </body>
</root>

第二个
 <root>
<body id="1" name="第一个" property="绝对第一个" />
<body id="1" name="第一个" property="绝对第二个" />
</root>

可以混合使用......本例就是混合使用,这个格式写法看自己习惯,我喜欢第二种,呵呵
<root>
<body id="1" name="first"  property="第一个" >绝对第一个</body>
<body id="1" name="second"  property="第一个" >绝对第二个</body>
</root>

/*
flash读取XML的时候是按照节点,节点属性,节点名称,读取
节点可以分成firstChild
子节点可以如此指定
for (vari=0; i<myXML.length; i++) {
 trace(myXML.childNodes[i]);
}
节点属性为attributes,返回为Object类型 需要指定具体名称
节点名称为 nodeValue
*/
//首先申明读取XML对象的XML
//XML对象有几个方法,具体查看FLASH帮助
//load指定XML路径
//onLoad发生导入XML时触发有两个参数一个为
//声明ignoreWhite为True,表示忽略空白
//System.useCodepage=true; 声明支持中文
System.useCodepage = true;
var myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("data.xml");
myXML.onLoad = function(sc) {
 if (sc) {
  //处理XML对象的函数:
  trace(myXML.childNodes[0]);
  trace(myXML.childNodes[0].nodeName);
  trace(myXML.childNodes[0].childNodes[0].attributes.name);
  trace(myXML.childNodes[0].childNodes[0].childNodes[0].nodeValue);
 }else{
   trace("找不到XML文档!")
 }
};

通过FlashVars传递了一个ID=21的参数,XMl加载的时候再把这个ID传递到Asp页面中,Asp页面接收到这个参数之后,就可以做自己想要做的任何事情拉,读写数据库等等。

代码入下:
System.useCodepage = true;
var myXML=new XML();
myXML.ignoreWhite = true;
var ID=_root.ID;
myXML.load("Post.asp?ID="+ID);
myXML.onLoad=function(success){
if (success){
Content.text=myXML.childNodes[0].childNodes[0].childNodes[0];
delete myXML;
}
}


备注其他知识:
读取XML节点的名称NodeName
trace(myXML.childNodes[0].nodeName);
读取XML节点的扩展属性:
trace(myXML.childNodes[0].childNodes[0].attributes.id);
firstChild : 引用父级节点的子级列表中的第一个子级
ChildNodes: 指定 XML 对象的子级组成的数组
nodeName : XML 对象的节点名称
attributes : 一个包含指定 XML 对象的所有属性的关联数组
nodeValue: 该 XML 对象的节点值

XML内容:

 程序代码
<?xml version = "1.0" encoding = "gb2312"?>
<list>
        <title>测试内容</title>
        <url>http://www.niuway.com</url>
        <other>update3</other>
</list>

简单说一下XML文档格式的书写规范:
第一行:
是一个XML文档的描述信息.其中定义了该XML文档的一些基本属性,包括:版本信息(version),使用的字符编码(encoding)
第二行:
(虽然在FLASH中我们用不到节点的任何属性,但是合式的XML文档必须要求一个根节点)
在XML文档中,这是一个根节点.XML规定所有标签必须有闭合.所以,在最后一行使用对应的标签来闭合.同样,单行的XML节点也需要闭合,例如:其中"/"符号就表示单行的节点闭合."title","url","other"是节点的属性,写法就是:属性名="属性值" 这样的名/值对.至于节点名和属性名都是可以自定义的,也就是说可以任意命名.但是还是建议要尽量规范

""节点是""的子节点,相应的""叫做""的父节点

在这个XML文档中有3个子节点,我们数据就存储在这3个子节点的属性中,分别有:title url other
我们要做的最终目的就是在FLASH中获取这些节点的属性值

FLASH 代码:

 程序代码

System.useCodepage = true;                   //中文
testnode_xml = new XML();                           //声明一个XML对象
testnode_xml.ignoreWhite = true;                 //忽略XML中的空白
testnode_xml.load("testnode.xml");                   //读取xml的路径
testnode_xml.onLoad = function(success)     //开始加载xml文件
{
   if(success)                                              //如果成功的话执行以下操作
        {
           UpdateInfo = testnode_xml.firstChild;  //读取进来的XML文件的firstChild是<list>
           Publish(UpdateInfo);
           delete testnode_xml;
           test1.setScrollTarget(tf1);                  //使文本刷新后的scrollbar仍然可用
           test2.setScrollTarget(tf2);
           test3.setScrollTarget(tf3);
         }
   else {
           testnode1 = "Error loading XML...";
        }
}
function Publish(xml_doc)
{
   content = xml_doc.childNodes;               //这个content有点像一个数组用来存储<list>的子结点们
   testnode1=content[0].firstChild;                 //建立一个动态文本,变量名为testnode1
   testnode2=content[1].firstChild;
   testnode3=content[2].firstChild;
}


其实在flash中用xml变量做为按钮的链接没想象中那么麻烦,只要在以上代码中把变量做好,就可以了,“testnode2=content[1].firstChild; ”中,content[1].firstChild; 读取的就是http://www.niuway.com,所以,只要在按钮上写上以下代码就可以了
on(release){
  getURL(testnode2,"_blank");
}


原创粉丝点击