初始化XML对象 
XML对象可以代表一个XML元素、属性、注释、处理指令或文本元素。在ActionScript 3.0中我们可以直接将XML数据赋值给变量: 
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> 
你也可以使用new 构造器来从XML数据文本创建一个XML对象实例: 
var myXML:XML = new XML("<order><item id='1'><menuName>burger</menuName><price>3.95</price></item></order>") 
如果XML数据不是格式完好的(如少了结束标签),那么将会出现运行时错误。 
注意,你也可以将变量实例传入XML数据中: 使用{}
var tagname:String = "item"; 
var attributename:String = "id"; 
var attributevalue:String = 5; 
var content:String = "Chicken"; 
var x:XML = <{tagname} {attributename}={attributevalue}>{content}</{tagname}>; 
trace (x.toXMLString()) 
   // Output: <item id="5">Chicken</item>

通常我们的应用是从外部源导入XML数据,如web service或RSS feed,以下是一个从远程URL导入XML数据的例子: 
var myXML:XML = new XML(); 
var XML_URL:String = "http://www.example.com/Sample3.xml"; 
//创建URLRequest。 
var myXMLURL:URLRequest = new URLRequest(XML_URL); 
//使用URLLoader导入数据。 
var myLoader:URLLoader = new URLLoader(myXMLURL); 
//添加事件监听器,以在XML数据导入完成后处理XML数据。 
myLoader.addEventListener("complete", xmlLoaded); 
//导入完成后,创建使用导入的数据创建XML对象 
function xmlLoaded(evtObj:Event) { 
       var myXML:XML = XML(myLoader.data); 
       trace("Data loaded."); 
}

E4X包含一些直观的方法XML数据的操作符(如.和@:用于访问属性): 
//获取第1个item的menuName值 
trace(myXML.item[0].menuName); // Output: burger 
//获取第1个item的id属性值 
trace(myXML.item[0].@id);//Output:1 
//获取id属性为2的item的menuName值 
trace(myXML.item.(@id==2).menuName); // Output: fries 
//获取menuName为burger的item的price值 
trace(myXML.item.(menuName=="burger").price); // Output: 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";

访问XML数据 
你可以使用.(点号)和..操作符访问XML对象的子节点,使用@操作符访问某一节点的属性。考虑以下XML对象: 
var x:XML = 
      <book ISBN="0942407296"> 
           <title>Baking Extravagant Pastries with Kumquats</title> 
           <author> 
               <lastName>Contino</lastName> 
               <firstName>Chuck</firstName> 
           </author> 
           <pageCount>238</pageCount> 
       </book> 
       <book ISBN="0865436401"> 
           <title>Emu Care and Breeding</title> 
           <editor> 
               <lastName>Case</lastName> 
               <firstName>Justin</firstName> 
           </editor> 
           <pageCount>115</pageCount> 
       </book> 
   </order> 
对象x.book表示一个包含所有名称为book的子节点的XMLList对象,该XMLList包含两个XML对象(两个book节点)。 
对象x..lastName表示一个包含XML树结构下部所有的lastName属性的XMLList对象,该XMList包含两个XML对象(两个LastName属性)。 
对象x.book.editor.lastName表示一个包含所有x对象的所有名称为book的子节点的所有名称为editor的子节点的所有lastName节点的XMLList对象,该XMLList只包含一个XML对象(值为"Case"的lastName属性)。

访问父节点和子节点 
parent()方法返回XML对象的父节点。 
你可以使用子节点列表的顺序索引值来访问特定的子节点,例如,假定某一XML对象x有两个名称为book的子节点,你可以如下访问它们: 
//第1个book节点 
x.book[0] 
//第2个book节点 
x.book[1] 
要访问孙子节点,我们可以如下直接使用儿子和孙子节点的索引值来访问: 
x.book[0].title[0] 
不过如果x.book[0]只有一个名称为title的子节点的话,那么可以省略索引: 
x.book[0].title 
类似的,如果x对象只有一个book子节点,并且该book节点的子节点对象只有一个title对象,那么两个索引值都可以省略: 
x.book.title

注意,你也可以使用child()方法,直接使用名称访问特定的子节点: 
var x.XML = 
       <order> 
           <book> 
               <title>Dictionary</title> 
           </book> 
       </order> 
var childName:String = "book"; 
trace (x.child(childName).title) // Output: Dictionary

访问属性 
我们使用使用@操作符访问XMLNode属性: 
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> 
//获取第1个item的id属性值 
trace(myXML.item[0].@id);//Output:1

使用属性或元素值过滤XML数据 
我们可以使用特定的元素名称和属性值来定位到特定的元素考虑以下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> 
以下是正确的访问方法: 
//lastName为“McGee”的employee对象,第1个employee节点 
x.employee.(lastName == "McGee") // The first employee node 
//lastName为“McGee”的employee对象的firstName节点,第1个employee节点的节点 
x.employee.(lastName == "McGee").firstName // The firstName property of that node 
//lastName为“McGee”的id属性 
x.employee.(lastName == "McGee").@id // The value of the id attribute 
//所有id属性值为347的employee对象列表 
x.employee.(@id == 347) 
//id属性值为347的employee对象的lastName子节点 
x.employee.(@id == 347).lastName 
//所有id属性值大于347的employee对象列表 
x.employee.(@id > 300) // An XML list with both employee properties 
//所有position子节点值包含“analyst”的employee对象列表 
x.employee.(position.toString().search("analyst") > -1)

使用for ... in和for each ... in 语句 
ActionScript 3.0 包括了一个新用来遍历XMLList对象的的for ... in语句和for each ... in语句。例如,考虑以下XML对象,myXML和myXML..item XMLList对象(包含两个item XML对象节点的XML列表): 
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 += Number(myXML.item.@quantity[pname]) * Number(myXML.item.price[pname]); 
}

for each ... in语句遍历XMLList的所有节点: 
var total2:Number = 0; 
for each (var item:XML in myXML..item) 

  total2 += Number(item@quantity) * Number(item.price); 
}

使用with语句 
我们可以使用with语句,来指明后续的属性和节点值都是基于某一XML对象,前面的for each ... in示例代码,使用with语句的代码如下: 
var total:Number = 0; 
for each (var item in myXML..item) 

   with (item) 
    { 
         //{内的属性和节点对象都是基于item XML对象的,所有不需要使用item.来访问。 
         total += Number(@quantity) * Number(price); 
     }


trace(total);

增加XML对象 
我们可以使用prependChild()方法或者appendChild()方法在XML对象的子节点列表的前面或者最后面添加节点: 
var x1:XML = <p>Paragraph 1</p> 
var x2:XML = <p>Paragraph 2</p> 
var x:XML = <body></body> 
x = x.appendChild(x1); 
x = x.appendChild(x2); 
x = x.prependChild(<p>Paragraph 0</p>); 
// x == <body><p>Paragraph 0</p><p>Paragraph 1</p><p>Paragraph 2</p></body>

使用insertChildBefore()方法或者insertChildAfter()方法在特定的节点前面活着回后面添加节点: 
var x:XML = 
   <body> 
       <p>Paragraph 1</p> 
       <p>Paragraph 2</p> 
   </body>

var newNode:XML = <p>Paragraph 1.5</p> 
x = x.insertChildAfter(x.p[0], newNode) 
x = x.insertChildBefore(x.p[2], <p>Paragraph 1.75</p>) 
注意,我们也可以在构造XML对象的时候使用大括号({和})来引用变量: 
var ids:Array = [121, 122, 123]; 
var names:Array = [["Murphy","Pat"],["Thibaut","Jean"], ["Smith","Vijay"]] 
var x:XML = new XML("<employeeList></employeeList>"); 
for (var i:int = 0; i < 3; i++) { 
          var newnode:XML = new XML(); 
           newnode = 
               <employee id={ids[i]}> 
                   <last>{names[i][0]}</last> 
                   <first>{names[i][1]}</first> 
               </employee> 
           x = x.appendChild(newnode) 
}

我们也可以使用=操作符来给XML对象节点赋值: 
var x:XML = 
   <employee> 
       <lastname>Smith</lastname> 
   </employee>

x.firstname = "Jean"; 
x.@id = "239";

以上代码将把XML对象X设置成如下: 
<employee id="239"> 
   <lastname>Smith</lastname> 
   <firstname>Jean</firstname> 
   </employee>

我们也可以使用+和+=操作符来连结XMLList: 
var x1:XML = <a>test1</a> 
var x2:XML = <b>test2</b> 
var xList:XMLList = x1 + x2; 
xList += <c>test3</c>

删除XML对象 
E4X规范中定义有delete和deleteByIndex方法用来删除特定的XML节点,但是在当前版本的ActionScript 3.0实现中,并没有实现这两个方法,所有我们不能直接使用这两个方法,不过我们可以使用遍历XML树,剔除特定的节点,重新构造新的XML对象的方法来删除某一特定节点,以下我们将删除employee的lastname子节点: 
private function deleteByIndex(xmlNode:XML,index:Number):XML{ 
    var newStr:String=''; 
    newStr+='<'+xmlNode.localName(); 
    for each (var att:XML in xmlNode.attributes()){ 
        newStr+=' '+att.localName()+'="'+att.toString()+'"'; 
    } 
    newStr+='>'; 
    var i:Number=0; 
    for each(var node:XML in xmlNode.children()){ 
        if(i!=index) 
            newStr+=node.toXMLString(); 
        i++; 
    } 
    newStr+='</'+xmlNode.localName()+'/>'; 
    return new XML(newStr); 
}

var myXML:XML= 
   <employee id="239"> 
           <lastname>Smith</lastname> 
           <firstname>Jean</firstname> 
           <address> 
           <city>shangrao</city> 
           <load>daihu</load> 
           <no>5</no> 
           </address> 
       </employee> 
myXML=deleteByIndex(myXML,0); 
以上的deleteByIndex函数有两个参数,第1的参数是被删除节点的父节点,第2的参数是被删除节点的在父节点的子节点列表中索引值。先遍历父节点的索引属性,然后遍历其所有的子节点,跳过我们要删除的节点,然后将它们组合成新的XML对象返回。 
如果XML对象非常复杂,数据量必较大的话,以上删除节点的实现方法效率是非常好低,所有正确的选择还是使用E4X定义的删除方法,不过这个功能要等到ActionScript 3.0的下一个测试版本才能够实现。

XML类型转换 
我们可以将XML对象和XMLList对象转换为字符串,同样的,我们也可以将字符串转换为XML对象和XMLList对象。顺便,请记住所有的XML属性值、名称和文本值都是字符串。 
转换XML和XMLList对象为字符串 
XML对象和XMLList对象都有有两个成员方法:toString()和toXMLString()方法。toXMLString()方法返回包含所有标签、属性、命名空间声明和XML对象内容的字符串,对与复杂的XML对象(包含有子元素),toString()方法的效果和toXMLString()方法的效果一样,但是对与简单的XML对象(只包含一个文本元素),toString()方法只返回元素的文本内容: 
var myXML:XML = 
  <order> 
       <item id='1' quantity='2'> 
           <menuName>burger</menuName> 
           <price>3.95</price> 
       </item> 
   <order> 
trace(myXML.item0.menuName.toXMLString()) 
    // Output: <menuName>burger</menuName> 
trace(myXML.item0.menuName.toString()) 
    // Output: burger

将文本字符串转换为XML对象 
我们可以使用new构造方法从字符串创建一个XML对象 
var x:XML = new XML('<a>test<b>'); 
但是如果我们试图将一个非XML或者结构不完整的字符串转换为XML对象,那么将会报运行时错误: 
var x:XML = new XML('<a>test'); // Throws an error

flex操作XML,强力总结帖的更多相关文章

  1. flex 操作xml 实现增删改查 .

    一 在介绍Flex中操作XML之前,首先简单介绍下XML中的基本术语. 元素:XML中拥有开始标签和结束标签的这一块称为“元素”    节点:把XML元素与文本结合起来统称为节点    根节点:位于整 ...

  2. 【转】【Flex】#010 操作XML文件(E4X)

    该教程转载来自于:http://blog.chinaunix.net/uid-14767524-id-2785506.html    [看到这边文章的位置,具体原作者未知] 经过一些排版的修改,其他内 ...

  3. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  4. php中通过DOM操作XML

    DOM文档在js里早就接触过,知道DOM不但可以操作html文档,还可以操作XHTML,XML等文档,有着极强的通用性,下面我们通过两个小例子,看看在PHP中是如何用DOM操作XML文档的,和js中差 ...

  5. 使用dom4j操作XML

    DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...

  6. 使用JDOM操作XML

    JDOM介绍 JDOM是使用Java语言编写的,用于读写及操作XML的一套组件,Jdom同时具有DOM修改文件的优点和SAX读取快速的优点. JDOM的使用 首先下载JDOM的JAR包,本文使用的是j ...

  7. php : DOM 操作 XML

    DOM 操作 XML 基本用法 XML文件: person.XML <?xml version="1.0" encoding="utf-8" ?> ...

  8. Strus2第一次课:dom4j操作xml

    先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; ...

  9. .NET 操作XML

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...

随机推荐

  1. 牛客网数据库SQL实战

    查找最晚入职员工的所有信息 CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_ ...

  2. Linux免密远程登陆

    上一节讲到伪分布式部署,启动后需要输入4次密码,停止服务后也要输入4次密码.本节记录免密登陆原理和实践 假设有2台服务器(A和B)(这是配置原理) 1)A需要远程登录B服务器,那么A就要创建密钥对(私 ...

  3. poj 2195 最小费用最大流模板

    /*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...

  4. xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368). #2

    1.错误发生场景:使用2.4.1版本的xtrabackup工具进行全备,备份日志中报出此错误2.知识要点:MySQL中,redo 日志写进程会在三种条件下被触发从log buffer中写日志到redo ...

  5. Centos7系统rc.local不起作用问题

    Centos7系统rc.local不起作用问题 来源 https://www.cnblogs.com/xjz00/p/7729405.html Centos7已经写了要chmod +x /etc/rc ...

  6. NOIP2017赛前模拟(4):总结

    题目: 1.打牌 给定n个整数(n<=1000000),按照扑克牌对子(x,x)或者顺子(x,x+1,x+2)打出牌···问最多可以打出多少次对子或者顺子?牌的大小<=1000000 2. ...

  7. UVA 116 Unidirectional TSP(DP最短路字典序)

    Description    Unidirectional TSP  Background Problems that require minimum paths through some domai ...

  8. sublime flatLand 主题

    今天试了下感觉主题不错 记下来备忘. 1.sublime3 package control install  搜索 flatLand 2 安装完成后. 修改 Preferences 文件,通过 Sub ...

  9. for循环创建对象

    有时候奇怪的发现往list添加数据的时候,一直被最后一个元素覆盖,首先 ,我们得明白原理: 在new 一个对象的时候,对象的ID是唯一确定的:将对象add入list中时,放入list中的其实是对象的引 ...

  10. 视音频数据处理入门:RGB、YUV像素数据处理【转】

    转自:http://blog.csdn.net/leixiaohua1020/article/details/50534150 ==================================== ...