免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1390 | 回复: 0
打印 上一主题 下一主题

解析XML [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-16 02:43 |只看该作者 |倒序浏览

FLASH + XML 求职简历 制作教程 (一)
模型JobXMLModel类 - 如何解析XML
                        
eidoit
   做这个
简历
的时候,一个下载了
愚人部落主页
源代码的朋友问我关于XML的问题。我说你等等,做好手头的东西我写个教程给你。现在就以
这个简历的XML
为例,说一下如何解析XML。(
→ 查看XML

   XML文件就像一个树状的目录。可以把第一行当作它扎根的“土地”。
   XML文件是由节点构成的。它的第一个节点为“根节点”。一个XML文件必须有且只能有一个根节点,其他节点都必须是它的子节点。我们在FLASH里使用XML对象解析XML的时候,this 代表整个XML文件,它的根节点就是 this.firstChildthis.firstChild.childNodes 则返回由根节点的所有子节点组成的节点数组。

  每个子节点又可以有自己的子节点。节点编号由0开始,根节点的第一个子节点为 this.firstChild.childNodes[0],它的子节点数组就是this.firstChild.childNodes[0].childNodes

  继续深入到没有子节点的单一节点,比如根节点第一个子节点的第二个子节点 this.firstChild.childNodes[0].childNodes[1],它返回的是一个XML对象(Object) 。这里需要特别注意,节点标签之间的数据本身也视为一个节点 this.firstChild.childNodes[0].childNodes[1].firstChild ,而不是一个值。

  我们解析XML的最终目的当然就是获得数据的值:this.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue 。注意!不是 this.firstChild.childNodes[0].childNodes[1].nodeValue !节点名称有时也是我们需要的数据: this.firstChild.childNodes[0].childNodes[1].nodeName 。注意比较获得节点名称和节点值的不同。

  除了作为子节点,数据还可以作为节点属性。节点属性写在节点标签内部:节点值 。如果数据全作为属性而没有节点值,则可以写成 的形式,而不用写成 。 注意节点必须关闭,写成 就不对了。
   节点的所有属性返回一个通用对象(Object),比如根节点第六个子节点的第三个子节点的所有属性为: this.firstChild.childNodes[5].childNodes[2].attributes 。 获得其中的“地址”属性: this.firstChild.childNodes[5].childNodes[2].attributes.地址

  比较而言,数据作为属性的方式更好。因为文件相对比较小,而且避免深入更多层子节点,解析速度更快。
   下面以简历的 JobXMLModel类 (模型)看看在flash里具体的解析。 JobXMLModel类 继承XML类,首先在构造函数里设置 ignoreWhite 属性为true忽略XML文件中多余的空格。
//构造函数
public function JobXMLModel() {
  ignoreWhite = true;
}

//覆盖XML类的 onLoad 事件
private function onLoad():Void {
 
 //变量tmpA存储根节点的节点数组。
  var tmpA:Array = this.firstChild.childNodes;
  
//把tmpA的长度存储在tmpL变量里。
  var tmpL:Number = tmpA.length;
  
//以根节点第一、第六个子节点为例,同样存储数组长度变量
  var basicInfoL:Number = tmpA[0].childNodes.length;
  var myWorksL:Number = tmpA[5].childNodes.length;
  
//根节点子节点的节点名称存入数组
   for (var i:Number = 0; i//第一个子节点数据作为子节点
  for (var i:Number = 0; i//单一节点返回一个XML对象,用一个变量tmpO存储它
    var tmpO:Object = tmpA[0].childNodes;
    
//把每个节点的名称和节点值作为通用对象(Object)的属性存在数组里
    基本资料.push({title:tmpO.nodeName, content:tmpO.firstChild.nodeValue});
  }
  
//第六个子节点数据作为节点属性
  for (var i:Number = 0; i//把节点名称和节点属性作为通用对象的属性存在数组里
    我的作品.push({url:tmpO.attributes.地址, name:tmpO.nodeName, desc:tmpO.attributes.描述});
  }
  
//把onLoad事件广播出去,由JobPresenter类(表示器)接收数据加载视图类(JobView )
  broadcastMessage("onXMLLoaded");
}

//隐式获取函数,供表示器接受数据
public function get basicInfo():Array {
  return 基本资料;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/28922/showart_423580.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP