原文地址:http://hi.baidu.com/yqzdm/item/f95fd9d24679d916d90e44c9

一、xml的写法:

这里的xml只是在有限范围内的了解,限于写一些简单的用于flash使用的xml文本。太深奥的东西我也不懂。

例1:课本.xml

<?xml version="1.0" encoding="UTF-8"?>
<课本>
<书名>语文</书名>
<书名>数学</书名>
<书名>历史</书名>
<书名>音乐</书名>
</课本>

这是个很简单的xml文档。

如果想增加其他信息,可以继续修改这个xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<课本>

<具体>
<书名>语文</书名>
<定价>5</定价>
</具体>

<具体>
<书名>数学</书名>
<定价>5.5</定价>
</具体>

<具体>
<书名>历史</书名>
<定价>6.5</定价>
</具体>

<具体>
<书名>音乐</书名>
<定价>4.5</定价>
</具体>

</课本>

看起来这个xml内容稍微有一点点实用的意思。

但是写法不止一种,比如:

<?xml version="1.0" encoding="UTF-8"?>
<课本>
<具体 书名="语文" 定价="5"/>
<具体 书名="数学" 定价="5.5"/>
<具体 书名="历史" 定价="6.5"/>
<具体 书名="音乐" 定价="4.5"/>
</课本>

这种看起来更直观些,它使用了属性/值对的方法。当标签没有文本节点时,尾标签可省略为</>.

属性可以通过attributes得到,节点名称通过nodeName得到,节点值通过nodeValue得到。

再开看一个xml文档结构,通过该结构来说对号入座的讲解:

这个图中文档结构来看,

<根></根>这一对标签所包含的部分,就是firstChild

其下有两对并列的<课本></课本>标签包含部分,这是firstChild.childNodes,是一个数组,第一个元素是firstChild.childNodes[0],第二个元素是firstChild.childNodes[1]。

拿firstChild.childNodes[0]来说,下一级又有子节点,firstChild.childNodes[0].childNodes表示,也就是

<n1 书名="语文">6</n1>
<n2 书名="数学">8</n2>
<n3 书名="英语">5</n3>
<n4 书名="美术">15</n4>

firstChild.childNodes[0].childNodes[0],或者firstChild.firstChild.firstChild,就来到了

<n1 书名="语文">6</n1>

n1是标签,也是节点,姑且叫它标签节点,节点名称(nodeName)是"n1"。6是文本,也是节点,叫文本节点,节点名称null,节点值(nodeValue)是6。这里两个节点并不是平级,6是n1的子级。 "书名"是属性(attributes),属性值是"语文"。

二、flash读取xml

xml文件名:课本.xml

<?xml version="1.0" encoding="UTF-8"?>
<课本>
<具体 >
<年级>一年级</年级>
<书名>语文</书名>
<定价>5</定价>
</具体>
<具体>
<年级>二年级</年级>
<书名>语文</书名>
<定价>6</定价>
</具体>
<具体>
<年级>三年级</年级>
<书名>历史</书名>
<定价>8</定价>
</具体>
</课本>

''''''''''''''''''''''''''''''''''''''''''''''''

flash文件名:l_xml.fla

var lx:XML = new XML();
lx.ignoreWhite = true;
lx.onLoad = function(s:Boolean) {
if (s) {

/*********************************************
先定位根节点root,再定位根节点的首节点。用for的双循环循环得到数据,显示在文本框中。
有时候真的是感觉很混乱,不过多用trace()测试一下就清楚了。
*********************************************/
   var root:XMLNode = lx.firstChild;
   var newnode:XMLNode = root.firstChild;
   for (j=0; j<root.childNodes.length; j++) {
    t.text += "-----------------\n";
    for (i=0; i<newnode.childNodes.length; i++) {
     t.text += root.childNodes[j].childNodes[i].nodeName+":"+root.childNodes[j].childNodes[i].firstChild+"\n";
    }
    t.text += "-----------------";
   }
} else {
   t.text = "cuo";
}
};
lx.load("课本11.xml");

''''''''''''''''''''''''''''''''

flash显示效果:

再做个练习:

书费.xml:

<?xml version="1.0" encoding="UTF-8"?>
<根>
<课本 年级="一年级">
<n1 书名="语文" >6</n1>
<n2 书名="数学" >8</n2>
<n3 书名="英语" >5</n3>
<n4 书名="美术" >15</n4>
</课本>
<课本 年级="二年级">
<n1 书名="语文" >7</n1>
<n2 书名="数学" >6</n2>
<n3 书名="英语" >9</n3>
</课本>
</根>

l_书费.fla:

var myxml:XML = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(s) {
if (s) {
   readxml();
} else {
   t.text = "载入出错!";
}
};
myxml.load("书费.xml");
function readxml() {
var root:XMLNode = myxml.firstChild;
//声明根节点root
var newnode1:Array = root.childNodes;
//定位根节点下第一层子节点数组newnode1,相当于知道有几个年级。
trace("第一层子节点数组是\n"+newnode1+"\n");
var len1:Number = newnode1.length;
//取得第一层子节点数组的长度。
trace("第一层子节点数组长度是"+len1+"\n");
var newnode2:Array = root.firstChild.childNodes;
//定位在根节点的首个子节点的子集,然后取得子集的数组长度,如果每个同级节点子集数目一样的话,这样定位就可以了,如果子集数目不等,要定位到子集最多的那个。
trace("第二层子节点数组是\n"+newnode2+"\n");
var len2:Number = newnode2.length;
//知道几种课本
trace("第二层子节点数组长度是"+len2+"\n");
var 书名:String = newnode2[0].attributes.书名;
//测试一下,看看能否取得xml文档结构中的书名。
trace("你所找的书名是"+"“"+书名+"”");
//数学
var ttt = newnode1[0].childNodes[1].firstChild;
//测试一下,看看能否取得xml文档结构中的定价。
trace("该书定价是"+ttt);
//8
for (i=0; i<len1; i++) {
   t.text += newnode1[i].attributes.年级+"\n";//输出年级
   for (j=0; j<len2; j++) {
    var ttt:String = newnode1[i].childNodes[j].firstChild.toString();
    if (ttt !== undefined) {//保证该位置有内容才输出,未定义内容则不输出。
     t.text += newnode1[i].childNodes[j].attributes.书名+":"+newnode1[i].childNodes[j].firstChild+"\n";
    //输出该年级的书名和定价
    }
   }
}
}
输出:

如果解决了读取的问题,接下来的一个技术难点当然是分页的问题。这个难点还是先放一放,继续熟练xml的读取吧。

flash读取XML节点内容以及节点属性的更多相关文章

  1. (转载)读取xml中的指定节点的值

            /// <summary>         /// 读取xml中的指定节点的值        /// </summary>         private st ...

  2. 读取xml中的指定节点的值

    /// <summary> /// 读取xml中的指定节点的值 /// </summary> private string ReadXmlNode(string filenam ...

  3. Qt QtXml读取xml文件内容

    Qt QtXml读取xml文件内容 xml文件内容 <?xml version="1.0" encoding="UTF-8"?> <YG_RT ...

  4. dom4j读取XML文件内容

    <?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> <NO ...

  5. 读取xml文件内容到数据库

    前言 前言不搭后语·················· 内容 听某个大牛说他们的公司常常会涉及到从xml文件中读数据到写入到数据库,序列化的时候会遇到这这个问题,将要持久化的数据到xml文件存储起来, ...

  6. 通过Java读取xml文件内容

    读取XML中的内容就需要对XML进行解析,目前对XML进行解析的方法分为四种: 下面解析的方法是DOM4J,需要下载jar包dom4j:https://dom4j.github.io/ package ...

  7. 读取XML文件内容

    myeclipse中类的格式 上面中的RunMain.java为程序执行的入口,JdbcUtil.java为实体类,XmlDocumentUtil.java执行解释xml文件与获取里面的属性,程序所需 ...

  8. php读取xml文件内容,并循环写入mysql数据库

    <?php $dbconn = mysql_connect("localhost","root","root"); $db = mys ...

  9. JS通过ajax动态读取xml文件内容

    http://www.sharejs.com/codes/javascript/8178 HTML文件代码如下 <!DOCTYPE html> <html> <head& ...

随机推荐

  1. 标准盒模型与ie盒模型

    ff(标准的盒模型) Box的宽高包括 padding .border.margin.content区域 ie Box的宽度包括  margin  content区域(content区域包含paddi ...

  2. 通过joystick遥感和按键控制机器人--11

    原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.首先安装joystick遥控器驱动: sudo apt-get install ros-indigo ...

  3. AJAX保留浏览历史的解决方案——hashchange()

    在ajax请求中,不能更新地址栏,地址栏上的“前进”和“后退”按钮就失效了,带来了另外一种糟糕的用户体验. 解决方案如下: 方案一:使用window. Onhashchange 事件 如下面Html片 ...

  4. glsl计算sprite的亮度饱和度对比度

    //glsl计算sprite的亮度饱和度对比度 #ifdef GL_ES precision mediump float; #endif uniform sampler2D u_texture; va ...

  5. 【NOIP2013】货车运输

    感觉这题挺水的……真的挺水的…… 原题: A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车 ...

  6. kuangbin_ShortPath L (POJ 2502)

    dij部分还是跟模板差不多的 但是这题的难点是处理输入 或者说理解题意 事实上每个点之间都是可以走的......WA了好几发就因为没意识到同一条路线上的各个站点之间居然也可以走得比车子快.... PS ...

  7. 硬链接与软连接[转自vbird]

    前言 在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录),这种是软链接: 另一种则是透过文件系统的 inode 连结来产生新档 ...

  8. 磁盘参数修订[转自vbird]

    某些时刻,你可能会希望修改一下目前文件系统的一些相关信息,举例来说,你可能要修改 Label name , 或者是 journal 的参数,或者是其他硬盘运行时的相关参数 (例如 DMA 启动与否-) ...

  9. C#绘图双缓冲

    C#绘图双缓冲 C#双缓冲解释: 简单说就是当我们在进行画图操作时,系统并不是直接把内容呈现到屏幕上,而是先在内存中保存,然后一次性把结果输出来,如果没用双缓冲的话,你会发现在画图过程中屏幕会闪的很厉 ...

  10. Don’t Assume – Per Session Buffers

    MySQL has a number of global buffers, i.e. your SGA. There are also a number of per session/thread b ...