`
demojava
  • 浏览: 549001 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

flex xml 操作

阅读更多

xml格式:

 <mx:XMLList id="treeData">   
<node label="1" id="1" index="1,">   
            <node label="1" id="101"  index="2,">   
                <node label="1-1" id="10101"  index="3,"/>   
                <node label="1-2" id="10102"  index="4,"/>   
                <node label="1-3" id="10103"  index="5,"/>   
            </node>

           <node label="1" id="101"  index="2,">   
                <node label="1-1" id="10101"  index="3,">
    <node label="1-2" id="10102"  index="4,"/>   
     <node label="1-3" id="10103"  index="5,"/>  
   </node>
                <node label="1-2" id="10102"  index="4,"/>   
                <node label="1-3" id="10103"  index="5,"/>   
            </node>          
        </node>            
</mx:XMLList>  

 

 一次获取所有节点的index属性的集合:

AS代码:

var dropSourceXml:XMLList=treeData;

Alert.show("index="+dropSourceXml..node.attribute("index")); //其中node 表示xml中定义的节点的名字 index 为属性名

至于每个index后面有个“,”方便截取转换成array 比较。

	<mx:XMLList id="userData">   
<root>
<users>
	<user id="1" >
		<firstName>
			firstName:admin1
		</firstName>
		<lastName>
			lastName:admin1
		</lastName>
	</user>
	<user id="2" >
		<firstName>
			firstName:admin2
		</firstName>
		<lastName>
			lastName:admin2
		</lastName>
	</user>
</users>
</root>
</mx:XMLList>

 1.根据索引返回指定的值

userData.users.user[1].firstName

2.根据属性的值返回制定节点的信息

userData.users.user(@id==2).firstName

3.根据邻居节点返回指定节点的值

firstName节点和lastName节点是相邻的节点

userData.users.user(@lastName=='lastName:admin2').firstName

4.访问节点属性使用@符号访问节点属性

userData.users.user(@id==2).@firstName

5.赋值

userData.users.user[1].@id=3;

userData.users.user[1].id=3;

userData.users.user(@id==2).firstName='asdfasdf';

userData.users.user(@lastName=='lastName:admin2').firstName="asdfasdfasdf"

6.判断是否存在指定的节点

 userData.users.hasOwnProperty("user")

7.循环遍历节点

for each(var node:XML in userData.users.user)

{

var name=node.firstName;

}

var list:XMLList=userData.users.user;

for each(var node:XML in list)

{

var name=node.firstName;

}

 8.获取后代所有节点

userData..user.firstName;返回的结果是

<firstName>firstName:admin1</firstName>

<firstName>firstName:admin2</firstName>

9.通配符使用
userData.user.user.*;返回结果

<firstName>firstName:admin1</firstName>

<lastName>lastName:admin1</lastName>

<firstName>firstName:admin2</firstName>

<lastName>lastName:admin2</lastName>

匹配所有属性userData.users.user@.*;返回结果是user节点中所有的属性值

10.添加节点

 

prependChild (newChild);//在xml开始部分插入一个节点

appendChild(newChild);//在xml结算位置插入一个节点

11.删除节点

delete userData.users.user[1];

 

12.xml中使用动态变量


var userName:String = "demo";
var myXML:XML = <person><userName>{userName}</userName></person>; 

 

13.新增一个节点元素

//例子一:
var example:XML = <person/>;
example.father = <father/>; //内容属性和元素名称不一定要相同,也可以: example.abc = <father/>,但会以元素名称为准,即会建立一个<father/>元素
trace(example);

/* 输出: <person> <father/> </person> */
//例子二:
var example:XML = <person/>;
example.father = ""; //建立一个<father/>元素
trace(example.toString());
/* 输出: <person> <father/> </person> */
//例子三:
var example:XML = <person/>;
var id:int = 10;
example["user" + id] = "";
trace(example);
/*
输出:<person> <user10/> </person>
注意: 有些情况必须使用第三种情况.例如,元素节点名称内含连字符("-")是完全合法的,但在ActionScript里会得到编译器错误: example.some-element = ""; //产生编译器错误 正确的写法是: example["some-element"] = ""; */

 

14.新增属性

var example:XML = <person/>;
example.element = "";
example.element.@name = "demo";
example.element.@["bad-variable-name"] = "yes";
example.element.@other = ["riahome.cn", undefined, true, 44, null];
var id:int = 44;
example.element.@["user" + id] = "love";
trace(example);
/*
输出:
<person>
  <element name="demo" bad-variable-name="yes" other="riahome.cn,,true,44," user44="love"/>
</person>
*/

 

15.向XML插入文字元素和节点元素

 

//在指定元素前和后插入,在最前端和尾端插入
var example:XML = <person/>;
example.two = "";
example.insertChildBefore(example.two, <one/>); //在two节点前插入one节点
example.insertChildBefore(example.two, "在two节点前插入文字");
example.insertChildAfter(example.two, <three/>); //在two节点后插入three节点
example.prependChild(<start/>); //在最顶端插入start节点
example.appendChild(<end/>); //在尾端插入end节点
example.start = "start内容"; //向节点增加内容
trace(example);
/*
输出:
<person>
  <start>start内容</start>
  <one/>
  在two节点前插入文字
  <two/>
  <three/>
  <end/>
</person>
*/

 

16.把XML实例的内容属性转换为任何可以转换成字符串的内容

 //先把等号右边转为可以转换的字符串
var example:XML = <person/>;
example.one = "one";
example.two = new URLLoader();
example.three = new Sprite();
example.four = new Boolean; //Boolean对象的值初始化为false
example.five = new Number();
example.six = new String();
example.seven = {a:"Youthoy", b:true, c:undefined};
example.eight = ["three", undefined, true, 44, null];
/*
输出:
<person>
  <one>one</one>
  <two>[object URLLoader]</two>
  <three>[object Sprite]</three>
  <four>false</four>
  <five>0</five>
  <six/>
  <seven>[object Object]</seven>
  <eight>three,,true,44,</eight>
</person>
*/

17.递归迭代XML

var example:XML = <menu>
                    <menuitem label="File">
                      <menuitem label="New"/>
                      <menuitem label="Save"/>
                    </menuitem>
                    <menuitem label="Help">
                      <menuitem label="About"/>
                    </menuitem>
                  </menu>;
walk(example);
function walk(node:XML):void {
for each(var element:XML in node.elements()) {
    trace(element.@label);
    walk(element);
}

 

18.读取文字节点及其值

var example:XML = <menu>
                    My name is Youthoy.
                    <myName>Youthoy</myName>
                  </menu>;
example.text(); //输出: My name is Youthoy.
example.myName.toXMLString(); //输出: <myName>Youthoy</myName>
//以下三行都输出: Youthoy
example.myName.toString();
example.myName.text();
example.myName;

 

 

19.递归元素属性时读取属性名与其值


var example:XML = <person name="Youthoy" age="21"/>;
    for each(var i:XML in example.attributes()) {
    trace(i.name() + "=" + i);
}
/*
输出:
name=Youthoy
age=21
*/
另类方法:
var example:XML = <person name="Youthoy" age="21"/>;
trace(example.@*[1]); //输出: 21

 

 

例子1(对于节点元素):
var example:XML = <a>
                    <z>I am z.</z>
                    <b>
                     <c></c>
                     <z>I am z.</z>
                   </b>
                 </a>;
trace(example..z.text()); //输出: I am z.I am z.
例子2(对于属性):
var example:XML = <person>
                    <a>
                      <item name="Youthoy" age="21"/>
                    </a>
                    <item name="Jimpa" age="21"/>
                  </person>
trace(example..@name); //输出: YouthoyJimpa

 

var example:XML = <foodgroup>
<fruits>
  <fruit color="red">Apple</fruit>
    <fruit color="orange">Orange</fruit>
    <fruit color="green">Pear</fruit>
    <fruit color="red">Watermelon</fruit>
  </fruits>
  <vegetables>
    <vegetable color="red">Tomato</vegetable>
    <vegetable color="brown">Potato</vegetable>
    <vegetable color="green">Broccoli</vegetable>
  </vegetables>
</foodgroup>;
trace(example..*.(hasOwnProperty("@color") && @color == "red"));
/*
hasOwnProperty所做的检测是确保元素具有color属性,然后,有的话,就测试color属性之值是否为red.只有当条件的计算结果为true时,该元素才会加入EX4运算式所返回的XMLList.

 
输出
<fruit color="red">Apple</fruit>
<fruit color="red">Watermelon</fruit>
<vegetable color="red">Tomato</vegetable>

 

参考连接:http://stackoverflow.com/questions/2225864/how-to-find-specific-xml-data-by-attribute-name-value-in-flex-actionscript

 

var myXML:XML =
<order>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
通常,应用程序都会从外部源(如 Web 服务或 RSS 供给)加载 XML 数据。不过为清楚
起见,本章中的示例是将 XML 数据作为文本来分配的。
如以下代码所示,E4X 包含了一些直观运算符(如点 (.))和属性标识符 (@) 运算符,用于
访问 XML 中的属性 (property) 和属性 (attribute):
trace(myXML.item[0].menuName); // 输出:burger
trace(myXML.item.(@id==2).menuName); // 输出:fries
trace(myXML.item.(menuName=="burger").price); // 输出:3.95
使用 appendChild() 方法可为 XML 分配一个新的子节点,如下面的代码片断所示:
var newItem:XML =
<item id="3">
<menuName>medium cola</menuName>
<price>1.25</price>
</item>
myXML.appendChild(newItem);
使用 @ 和 . 运算符不仅可以读取数据,还可以分配数据,如下所示:
myXML.item[0].menuName="regular burger";
myXML.item[1].menuName="small fries";
myXML.item[2].menuName="medium cola";
myXML.item.(menuName=="regular burger").@quantity = "2";
myXML.item.(menuName=="small fries").@quantity = "2";
myXML.item.(menuName=="medium cola").@quantity = "2";
使用 for 循环可以循环访问 XML 的节点,如下所示:
var total:Number = 0;
for each (var property:XML in myXML.item)
{
var q:int = Number(property.@quantity);
var p:Number = Number(property.price);
var itemTotal:Number = q * p;
total += itemTotal;
trace(q + " " + property.menuName + " $" + itemTotal.toFixed(2))
}
trace("Total: $", total.toFixed(2));

访问属性
使用 @ 符号(属性标识符运算符)可以访问 XML 或 XMLList 对象的属性,如下面的代码
所示:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.@id); // 6401
可以一起使用 * 通配符和 @ 符号来访问 XML 或 XMLList 对象的所有属性,如下面的代码
所示:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.@*.toXMLString());
// 6401
// 233

按属性或元素值过滤
可以使用括号运算符 — ( 和) — 过滤具有特定元素名称或属性值的元素。请考虑下面的
XML 对象:
var x:XML =
<employeeList>
<employee id="347">
<lastName>Zmed</lastName>
<firstName>Sue</firstName>
<position>Data analyst</position>
</employee>
<employee id="348">
<lastName>McGee</lastName>
<firstName>Chuck</firstName>
<position>Jr. data analyst</position>
</employee>
</employeeList>
x.employee.(lastName == "McGee") — 这是第二个 employee 节点。
■ x.employee.(lastName == "McGee").firstName — 这是第二个 employee 节点的
firstName 属性。
■ x.employee.(lastName == "McGee").@id — 这是第二个 employee 节点的 id 属性的值。
■ x.employee.(@id == 347) — 第一个 employee 节点。
■ x.employee.(@id == 347).lastName — 这是第一个 employee 节点的 lastName 属性。
■ x.employee.(@id > 300) — 这是具有两个 employee 属性的 XMLList。
■ x.employee.(position.toString().search("analyst") > -1) — 这是具有两个
position 属性的 XMLList。

如果试图按照可能不存在的属性或元素过滤,Adobe Flash Player 将引发异常。例如,以下
代码的最后一行产生一个错误,因为第二个 p 元素中没有 id 属性:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
同样,以下代码的最后一行也会产生一个错误,因为第二个 p 元素没有 b 属性:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));


var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
为了避免这些错误,可以使用 attribute() 和 elements() 方法来识别具有匹配属性或元素
的属性,如下面的代码所示:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(attribute('id') == '123'));
trace(doc.p.(elements('b') == 'Bob'));

还可以使用 hasOwnProperty() 方法,如下面的代码所示:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));

使用 for..in 和 for each..in 语句
ActionScript 3.0 包含用于循环访问 XMLList 对象的 for..in 语句和 for each..in 语
句。例如,我们来看 XML 对象 myXML 和 XMLList 对象 myXML.item。XMLList 对象
myXML.item 由 XML 对象的两个 item 节点组成。
var myXML:XML =
<order>
<item id='1' quantity='2'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2' quantity='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>;
for..in 语句用于循环访问 XMLList 中的一组属性名称:
var total:Number = 0;
for (var pname:String in myXML.item)
{
total += myXML.item.@quantity[pname] * myXML.item.price[pname];
}

for each..in 语句用于循环访问 XMLList 中的属性:
var total2:Number = 0;
for each (var prop:XML in myXML.item)
{
total2 += prop.@quantity * prop.price;
}

//
读取外部 XML 文档
可以使用 URLLoader 类从 URL 加载 XML 数据。要在应用程序中使用以下代码,请将示
例中的 XML_URL 值替换为有效的 URL:
var myXML:XML = new XML();
var XML_URL:String = "http://www.example.com/Sample3.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
trace("Data loaded.");
}

 

对于特殊的xml定义,api有详细的说明



 

  • 大小: 13.3 KB
分享到:
评论

相关推荐

    flex 操作XML

    综上所述,Flex中的XML操作涉及文件系统访问、网络通信、数据解析等多个方面,熟练掌握这些技能对于构建Flex应用至关重要。在实际项目中,根据具体需求灵活运用这些知识点,可以实现高效的数据管理和交换。

    Flex与JSON及XML的互操作

    ### Flex与JSON及XML的互操作:深度解析 #### 核心知识点概览 1. **Flex框架**:一种开源框架,允许开发者使用MXML语言和ActionScript 3构建Flash应用程序,尤其适用于创建富互联网应用(RIA)。 2. **JSON...

    flex - xml操作

    ### Flex与XML操作详解 #### 一、E4X与ActionScript 3.0的集成 E4X(ECMAScript for XML)是ECMAScript标准的一个扩展,它被引入到ActionScript 3.0中,极大地简化了XML数据处理的过程。在Flash 5时,ActionScript...

    flex解析xml框架实例

    在Flex界面中添加HTTPService组件,配置其URL以指向服务器上的XML数据源,然后设置result事件监听器,以便在接收到数据时执行解析操作。 例如,以下是一个简单的HTTPService使用示例: ```xml &lt;![CDATA[ import...

    readxml flex加载xml文件

    E4X是AS3中内置的XML支持,它使XML操作像处理JavaScript对象一样简单。E4X允许直接通过XML对象来访问和修改XML数据。以下是如何使用E4X加载XML文件: ```actionscript var xmlLoader:URLLoader = new URLLoader(); ...

    Flex里解析XML数据

    Flex中的XML支持E4X,这是一种集成在AS3中的XML处理语法,使XML操作更加直观。E4X允许我们像处理JavaScript对象一样处理XML,例如: ```actionscript var items:Array = xml.root.item.*; for each (var item:XML ...

    flex解析xml

    总结,Flex解析XML文件主要通过XML和XMLList类,它们提供了丰富的API来操作XML数据。理解这些概念和方法,将有助于你在Flex应用中有效地处理和展示XML数据。无论是简单的数据展示还是复杂的交互逻辑,Flex都能通过...

    FLEX操作XML&JSON

    【XML操作】 1. **加载XML数据**:在Flex中,可以使用`&lt;mx:XML&gt;`组件来加载XML数据源。例如,通过指定URL,Flex可以从服务器获取XML文档,如`&lt;mx:XML source="http://example.com/data.xml" id="xmlData"/&gt;`。 2. ...

    一个Flex xml MP3播放器

    【Flex XML MP3播放器详解】 Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。这个“Flex XML MP3播放器”项目是利用Flex技术开发的一个多媒体播放器,专用于播放MP3音频文件。在本文...

    flex xml生成tree 源码

    标题:Flex XML生成Tree源码 描述:此代码示例展示了如何在Flex应用程序中使用XML数据来动态生成一个树形结构(Tree)。Flex是Adobe Systems开发的一款开源框架,用于构建跨平台的桌面和移动设备应用。这段代码通过...

    flex 解析xml文件 httpservice

    在Flex开发中,XML文件常被用作数据存储和传输的格式,因为它结构清晰、易于理解和操作。本篇文章将深入探讨如何使用Flex解析XML文件,并通过HTTPService来读取XML内容,以及如何根据需求过滤字符串并获取所需值。 ...

    flex 解析xml实例

    在Flex中,我们通常使用XML类来解析和操作XML文档。以下是一些关键步骤和知识点: 1. **创建XML对象**:在Flex中,你可以通过XML()构造函数创建一个XML对象,然后加载XML字符串或文件。例如: ```actionscript ...

    flex 读XML 写XML 并保存为文件

    总结,Flex中对XML的操作包括读取、写入和保存,可以结合E4X和FileReference类实现。同时,通过序列化和反序列化技术,可以将图形数据与XML文件进行交互,方便数据的持久化和复用。在实际项目中,这些技能对于构建富...

    flex 操作xml 实现增删改查

    ### Flex操作XML实现增删改查 在Flex中操作XML数据是进行动态内容处理的关键技能之一。本篇文章将深入探讨如何使用Flex中的XML类来实现对XML数据的增、删、改、...希望本文能帮助读者更好地掌握Flex中的XML操作技巧。

    Flex操作XML

    // 进行XML操作 } ``` 2. **解析XML**:一旦XML加载完成,你可以使用XML类的方法来访问和操作XML节点。例如,`children()`、`@attributeName`和`parent()`等方法用于获取子元素、属性值和父元素。 3. **绑定XML到...

    flex xml 生成

    Flex XML 生成是一个在ActionScript 3.0中处理XML文档的重要技术,它主要用于构建基于Flex的应用程序。Flex是Adobe开发的一个开源框架,用于构建富互联网应用程序(RIA),它允许开发者使用MXML和ActionScript来设计...

    动态绑定XML,实现flex树控件的绑定

    1. 创建XML数据:在.NET后端,你可以使用XMLDocument或者XDocument类来创建和操作XML。例如,生成一个表示树结构的XML文件,其中包含节点(节点可以有子节点)。 ```csharp var doc = new XDocument( new XElement...

    flex读取xml乱码的解决方法

    在探讨“Flex读取XML乱码的解决方法”这一主题时,我们首先需要理解几个关键概念:Flex框架、XML文件以及编码问题。Flex是一种用于构建跨平台桌面应用程序和移动应用程序的强大框架,它由Adobe Systems开发并开源。...

    Flex中采用Flex-config.xml进行命令行的编译

    在Flex开发环境中,`flex-config.xml`文件是一个至关重要的配置文件,它允许开发者自定义Adobe Flex编译器的行为。这个文件通常位于项目的根目录下,或者在全局的Flex SDK安装路径中,对于命令行编译尤其重要。通过...

Global site tag (gtag.js) - Google Analytics