Flex中XML加载和读取

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
posted @ 2013-04-13 18:34  Jack Tao  阅读(839)  评论(1编辑  收藏  举报