flash 读取 xml中内容

lihan6415151528 2010-04-09 12:24:24
<?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
<DIV class=blockcode><DIV id=code0>
//读取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);

}
</DIV>复制代码</DIV>
xml格式 两种写法
第一种
<DIV class=blockcode><DIV id=code1>
//声明省略,不影响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>
</DIV>复制代码</DIV>
第二个
<DIV class=blockcode><DIV id=code2>
<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);

}

节点属性为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文档!")

}

};
</DIV>复制代码</DIV>

通过FlashVars传递了一个ID=21的参数,XMl加载的时候再把这个ID传递到Asp页面中,Asp页面接收到这个参数之后,就可以做自己想要做的任何事情拉,读写数据库等等。
代码入下:
<DIV class=blockcode><DIV id=code3>
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;

}

}
</DIV>复制代码</DIV>

备注其他知识:
读取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内容:
程序代码
<DIV class=blockcode><DIV id=code4>
<?xml version = "1.0" encoding = "gb2312"?>

<list>

<title>测试内容</title>

<url>http://www.niuway.com</url>

<other>update3</other>

</list>
</DIV>复制代码</DIV>
简单说一下XML文档格式的书写规范:
第一行:
是一个XML文档的描述信息.其中定义了该XML文档的一些基本属性,包括:版本信息(version),使用的字符编码(encoding)
第二行:
(虽然在FLASH中我们用不到节点的任何属性,但是合式的XML文档必须要求一个根节点)
在XML文档中,这是一个根节点.XML规定所有标签必须有闭合.所以,在最后一行使用对应的标签来闭合.同样,单行的XML节点也需要闭合,例如:其中"/"符号就表示单行的节点闭合."title","url","other"是节点的属性,写法就是:属性名="属性值" 这样的名/值对.至于节点名和属性名都是可以自定义的,也就是说可以任意命名.但是还是建议要尽量规范
""节点是""的子节点,相应的""叫做""的父节点
在这个XML文档中有3个子节点,我们数据就存储在这3个子节点的属性中,分别有:title url other
我们要做的最终目的就是在FLASH中获取这些节点的属性值
FLASH 代码:
程序代码
<DIV class=blockcode><DIV id=code5>
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;

}
</DIV>复制代码</DIV>
其实在flash中用xml变量做为按钮的链接没想象中那么麻烦,只要在以上代码中把变量做好,就可以了,“testnode2=content[1].firstChild; ”中,content[1].firstChild; 读取的就是http://www.ttsmm.com,所以,只要在按钮上写上以下代码就可以了
on(release){
getURL(testnode2,"_blank");
}
...全文
734 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧