xml使用的方法众多,但在用的时候老是会忘掉一些用法, 因而将XML的用法记录下来,方便查阅。
1. 定义内部的xml
方法一 使用字符串来表示xml
var xmlStr:String = " <root><menuitem id="FILE_OPEN" label="打开"/> <menuitem id="FILE_SAVE" label="保存"/></root>";
方法二 使用xml来定义
var xml:XML = <root> <menuitem id="FILE_OPEN" label="打开"/> <menuitem id="FILE_SAVE" label="保存"/> </root>;
方法三 使用MXML标签来定义
<fx:XML id="data" xmlns=""> <root> <users> <user> <name>ZhangSanFeng</name> <pwd>123456</pwd> </user> </users> </root> </fx:XML>
2. 加载外部的xml
xml文件 asserts/user.xml;
<?xml version="1.0" encoding="UTF-8"?> <root> <users> <user> <name>ZhangSanFeng</name> <pwd>123456</pwd> </user> </users> </root>
方法一 使用URLLoader来加载
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" creationComplete="init()"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ private function init():void { var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,onLoadComplete,false,0,true); var request:URLRequest = new URLRequest("assets/user.xml"); loader.load(request); } private function onLoadComplete(event:Event):void { var loader:URLLoader = event.target as URLLoader; var xml:XML = new XML(loader.data); trace(xml.users[0].user[0].name); } ]]> </fx:Script> </s:Application>
方法二 通过指定fx:XML标签的source属性来加载
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" creationComplete="init()"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <fx:XML id="xml" source="assets/user.xml" /> </fx:Declarations> <fx:Script> <![CDATA[ private function init():void { trace(xml.users[0].user[0].name); } ]]> </fx:Script> </s:Application>
3. 读取xml
了解XML DOM有助于理解 如何读取XML
相关链接:http://www.w3school.com.cn/xmldom/index.asp
assets/user.xml
var xml:XML = <root> <users> <user> <name firstName="Zhang">ZhangSanFeng</name> <pwd>123456</pwd> </user> </users> </root>;
在上面的文件中:
(1) root节点是文档节点。 使用trace(xml.root) 会打印出 空字符串。即xml不包含root节点。实际上xml 与 root节点等同。
(2) users,user,name 是元素节点。元素节点可以拥有子元素节点。
var list:XMLList = xml.users; //xml.users类型是XMLList,而不是XML
var users:XML = list[0]; //xml.users[0]的类型才是XML
元素节点 转成String时,叶子节点和非叶子节点存在差异。
trace(xml.users[0].user[0]); 结果显示: <user> <name firstName="Zhang">ZhangSanFeng</name> <pwd>123456</pwd> </user> trace(xml.users[0].user[0].name); 结果显示: ZhangSanFeng
(3) ZhangSanFeng 是文本节点
trace(xml.users[0].user[0].name.text()); //XML.text() 返回文本节点列表
显示结果:
ZhangSanFeng
(4) firstName为属性节点 ,使用特殊符号@来获取
trace(xml.users[0].user[0].name.@firstName[0]); 显示结果: Zhang xml.users[0].user[0].name.@firstName 的类型为XMLList, xml.users[0].user[0].name.@firstName[0]的类型才是XML