flex XML

本文详细介绍了 ActionScript 3.0 使用 ECMAScript for XML (E4X) 进行 XML 操作的方法,包括创建动态 XML、插入 XML 元素、添加属性、读取 XML 树、查找元素及访问属性等。通过 Flex 实例展示了如何在实际应用中应用这些技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML 是一种结构化的描述数据形式,因其简单,灵活,尤其是在数据交换和可移植等优点现

已成为事实上的工业标准。

 

ActionScript 3.0 新增了新的操作XML的语法,即ECMAScript for XML,也叫E4X,提供一种比

Document Object Model (DOM)更简单更容易访问XML的新方式。使用E4X,你会发现操作XML

比以前更简单了

 

ActionScript 3.0 包含一些用于处理 XML 结构化信息的类。下面列出了两个主类:
■ XML:表示单个 XML 元素,它可以是包含多个子元素的 XML 文档,也可以是文档中
的单值元素。
■ XMLList:表示一组 XML 元素。当具有多个“同级”(在 XML 文档分层结构中的相
同级别,并且包含在相同父级中)的 XML 元素时,将使用 XMLList 对象。例如,
XMLList 实例是使用以下一组 XML 元素(可能包含在 XML 文档中)的最简便方法:
<artist type="composer">Fred Wilson</artist>
<artist type="conductor">James Schmidt</artist>
<artist type="soloist">Susan Harriet Thurndon</artist>

 

技术名词:

 

XML document :

包含XML的文件,也指读取和发送XML的数据,XML文档的概念不要和XMLDocument类搞混。

 

XML包 :

一个XML包指从整个XML文档中取出的片断

XML 节点e :

XML最基本的块,节点可以是元素,文本节点,属性等等

XML 元素 :

这个术语和"Tag"意义类似,更确切地说,元素包含tags。元素必须有开始和结束标签

(<element></element>)或(<element />).

Root 节点 :

XML层级元素中最顶层的元素

Text 节点 :

包含文本的节点,一般都在元素里面

Attribute(属性):

元素的一部分,如<element name="value">,name="value"就是属性.

XML 声明 :

典型的申明如<?xml version="1.0" ?>.

XML 树 :

XML 数据的节点层级构成XML 树

 

可以通过{}创建动态xml

 

 

添加XML元素:

a:通过newElement属性来添加新的元素

 

Flex代码  收藏代码
  1. var example:XML <example />;  
  2. example.newElement <newElement />;  
  3.   
  4.   

 
b:用(.)运算符

 

Flex代码  收藏代码
  1. var example:XML <example />;  
  2. example.emptyElement "";  
  3.   
  4.   
 

c:用([ 和])

 

Flex代码  收藏代码
  1. var example:XML <example />;  
  2. var id:int 10;  
  3. example[ "user" id "";  
  4.   
  5.   

 上述三种职能插入到尾部,可用insertChildBefore( )和insertChildAfter( ) 方法来控制插入的位置

 

Flex代码  ); example = example.insertChildAfter( example.two, ); " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> 收藏代码
  1. var example:XML <example/>;  
  2. example.two "";  
  3. example example.insertChildBefore( example.two, <one /> );  
  4. example example.insertChildAfter( example.two, <three /> );  
  5.   
  6.   

 

 

在XML元素中添加属性 使用E4X的@ 操作符

 

Flex代码  收藏代码
  1. var example:XML <example><someElement/></example>;  
  2. example.someElement.@number 12.1;  
  3. example.someElement.@string "example";  
  4. example.someElement.@boolean true;  
  5. example.someElement.@array ["a", null, 7, undefined, "c"];  
  6.   
  7.   

 但是有时如果属性名包含一些特殊符号,则不能用@操作符,必须加上[]操作符

 

example.someElement.@["bad-variable-name"] = "yes";

在[]里还可用表达式产生动态属性名,这是种很实用的技巧:

example.someElement.@["color" + num] = "red";

 

 

读取XML树中的元素 :

使用elements( ) 方法返回XMLList 类型的所有元素,并用for each 循环遍历

 

Flex代码  This is a text node ; for each ( var element:XML in menu.elements( ) ) { trace( element.@label ); }" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> 收藏代码
  1. var menu:XML <menu>  
  2. <menuitem label="File">  
  3. <menuitem label="New"/>  
  4. </menuitem>  
  5. <menuitem label="Help">  
  6. <menuitem label="About"/>  
  7. </menuitem>  
  8. This is text node  
  9. </menu>;  
  10.   
  11. for each var element:XML in menu.elements(  
  12.   
  13. trace( element.@label );  
  14.  

 elements( ) 方法只返回下一级的子元素节点,这里面不包括文本节点和下一级节点.要向访问整个XML结构,还需进行递归循环处理

 

Flex代码  This is a text node ; walk( menu ); function walk( node:XML ):void { for each ( var element:XML in node.elements( ) ) { trace( element.@label ); // Recursively walk the child element to reach its children walk( element ); } }" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> 收藏代码
  1. var menu:XML <menu>  
  2. <menuitem label="File">  
  3. <menuitem label="New"/>  
  4. </menuitem>  
  5. <menuitem label="Help">  
  6. <menuitem label="About"/>  
  7. </menuitem>  
  8. This is text node  
  9. </menu>;  
  10.   
  11.   
  12.   
  13. walk( menu );  
  14.   
  15.   
  16. function walk( node:XML ):void  
  17. for each var element:XML in node.elements(  
  18. trace( element.@label );  
  19. // Recursively walk the child element to reach its children  
  20. walk( element );  
  21.  
  22.  

 通过节点名字来查找元素 直接使用E4X 的. 加上属性名语法来查找元素

 

var fruit:XML = <fruit><name>Apple</name></fruit>;

trace( fruit.name );// 显示: Apple

var author:XML = <author><name><firstName>Darron</firstName></name></author>;

trace( author.name.firstName );// 显示: Darron

还有种简便的方法,即使用双点操作符(..)来跳过一级访问,如:

var author:XML = <author><name><firstName>Darron</firstName></name></author>;

trace( author..firstName );// 显示: Darron

当有多个元素节点具有相同名称时,可通过索引值访问,这有点像数组,使用中括号

 

Flex代码  收藏代码
  1. var items:XML <items>  
  2. <item>  
  3. <name>Apple</name>  
  4. <color>red</color>  
  5. </item>  
  6. <item>  
  7. <name>Orange</name>  
  8. <color>orange</color>  
  9. </item>  
  10. </items>;  
  11.   
  12. trace( items.item[0].name );// 显示: Apple  
  13. trace( items.item[1].name );// 显示: Orange  

 元素节点,但又不知道有多少个,可用for each 循环遍历

 

Flex代码  收藏代码
  1. var items:XML <items>  
  2. <item>  
  3. <name>Apple</name>  
  4. <color>red</color>  
  5. </item>  
  6. <item>  
  7. <name>Orange</name>  
  8. <color>orange</color>  
  9. </item>  
  10. </items>;  
  11.   
  12. // 使用双点操作符  
  13. for each var name:XML in items..name  
  14.   
  15. trace( name );  
  16.  

 也可用[]操作符来访问:

var nodeName:String = "color";

var fruit:XML = <fruit><color>red</color></fruit>;

trace( fruit[nodeName] );// Displays: red

需要注意的是[]操作符不能和双点操作符一起用

trace( fruit..[nodeName] ); // 导致编译错误

 

text( ) 方法可正确返回文本节点内容:

 

Flex代码  收藏代码
  1. var fruit:XML <fruit>  
  2. <name>Apple</name>  
  3. An apple day...  
  4. </fruit>;  
  5.   
  6. for each var textNode:XML in fruit.text(  
  7. trace( textNode );// 显示: An apple day...  
  8.  

 

读取元素的属性 :

使用attributes( ) 方法返回指定元素的属性列表,或者通过名称用E4X的@操作符或attribute( )

 

Flex代码 ; var attributes:XMLList = fruit.attributes( ); trace( attributes[0] );// 显示: Apple trace( attributes[1] );// 显示: red" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> 收藏代码
  1. var fruit:XML <fruit name="Apple" color="red" />;  
  2. var attributes:XMLList fruit.attributes( );  
  3.   
  4. trace( attributes[0] );// 显示: Apple  
  5. trace( attributes[1] );// 显示: red  

 name( ) 方法可显示出属性名

 

Flex代码 ; for each ( var attribute:XML in fruit.attributes( ) ) { trace( attribute.name( ) + " = " + attribute.toString( ) ); }" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> 收藏代码
  1. var fruit:XML <fruit name="Apple" color="red" />;  
  2. for each var attribute:XML in fruit.attributes(  
  3. trace( attribute.name( attribute.toString( );  
  4.   
  5.   
  6.  

 如果属性名含有特殊字符,可用[]进行访问

 

使用delete 关键字删除元素,文本节点和属性 ;delete只能一次删除一个节点,如果要删除多个节点,可通过for循环进行删除

<template id="login_navbar" inherit_id="website.layout" name="Login Page Navigation"> <xpath expr="//header" position="before"> <nav class="custom-login-nav" style="background:#000;border-bottom:1px solid #eee;padding:10px 0;position:fixed;top:0;left:0;width:100%;z-index:1099;"> <div style="margin:0 auto;display:flex;align-items:center;justify-content:space-between;padding:0 15px;"> <div> <small> <span style="font-weight:bold;font-size:15px;color:#7c6e7f;text-decoration:none;"> 欢迎访问Odoo亚太地区金牌服务机构·开源智造(OSCG)</span> <span style="" class="text-white"> <b>&nbsp;</b> </span> </small> <a href="tel:400-900-4680" data-original-title="" title="" aria-describedby="tooltip383200"> <small> <b data-original-title="" title="" aria-describedby="tooltip932940"> <i class="fa fa-1x fa-fw fa-phone ml-3 mr-2 text-white" style="" data-original-title="" title="" aria-describedby="tooltip873223" /> <font style="font-size: 12px;color:#fff;">400-900-4680&nbsp;</font> </b> </small> </a> <a href="mailto:sales@oscg.cn" data-original-title="" title="" aria-describedby="tooltip722417"> <small> <i class="fa fa-1x fa-envelope fa-fw ml-3 mr-2 text-o-color-3" style="font-size: 12px;" data-original-title="" title="" aria-describedby="tooltip553776" /> <font style="" class="text-o-color-4" data-original-title="" title="" aria-describedby="tooltip42618"><b>sales@oscg.cn</b>&nbsp;</font> </small> </a> </div> <div style="color:#fff;"> <div class="no_icon_color s_share" data-name="Social Media"> <small class="s_share_title text-muted"> <span style="font-size: 14px;" class="text-o-color-4"> <b>Language/语言</b> </span> <span style="font-size: 14px;"> <b>:</b> </span> <span style="font-size: 11.2px;"> <b> </b> </span> </small> <img src="/website_login_nav/static/src/img/cn.png" style="width:20px;height:14px;vertical-align:middle;margin-right:5px;" /> &nbsp;<font style="font-size: 12px;"> <b><a href="http://www.oscg.cn/" data-original-title="" title="" style="color:#fff;"> 简体中文&nbsp;</a> &nbsp; &nbsp;&nbsp;</b> </font> <img src="/website_login_nav/static/src/img/us.png" style="width:20px;height:14px;vertical-align:middle;margin-right:5px;" /> &nbsp;<span style="display: inline !important; font-size: 12px;"> <b><a href="http://www.oscg.com.hk" data-original-title="" title="" style="color:#fff;" aria-describedby="tooltip75929">English</a>&nbsp; &nbsp; &nbsp;&nbsp;</b> </span> <!-- <img src="/website_login_nav/static/src/img/jp.png" style="width:20px;height:14px;vertical-align:middle;margin-right:5px;" /> &nbsp;<span style="display: inline !important; font-size: 12px;"> <b><a href="http://www.oscg.com.hk" data-original-title="" title="" style="color:#fff;" aria-describedby="tooltip75929">日本語</a>&nbsp; &nbsp; &nbsp;&nbsp;</b> </span> --> <span style="font-size: 0.875rem; display: inline !important;">&nbsp;</span> </div> </div> </div> </nav> </xpath> <!-- 为wrapwrap添加上边距 --> <xpath expr="//div[@id='wrapwrap']" position="attributes"> <attribute name="style">padding-top: 110px;</attribute> </xpath> </template>可以实现在header顶部,但是手机端的会把header遮挡住,应该如何修改才可以变为odoo的定制模块‘
最新发布
08-12
org.apache.jasper.JasperException: 无法为JSP编译类: 在生成的java文件中的第:[15]行发生错误:[C:\Users\19653\AppData\Local\JetBrains\IntelliJIdea2024.3\tomcat\Unnamed_meeting\work\Catalina\localhost\ROOT\org\apache\jsp\html\article_jsp.java] The type jdk.jfr.internal.tool.Command.title is not visible Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:72) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:192) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:542) org.apache.jasper.compiler.Compiler.compile(Compiler.java:371) org.apache.jasper.compiler.Compiler.compile(Compiler.java:343) org.apache.jasper.compiler.Compiler.compile(Compiler.java:329) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51此为错误,以下为jsp代码<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.sql.*" %> <%@ page import="static jdk.jfr.internal.tool.Command.title" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>文章</title> </head> <body> <jsp:include page="/incloud/header.jsp" /> <div class="d-flex align-items-stretch"> <!-- Sidebar Navigation--> <jsp:include page="/incloud/sidebar.jsp" /> <% boolean browseCount; %> <!-- Sidebar Navigation end--> <div class="page-content"> <div class="page-header"> <div class="container-fluid"> <h2 class="h5 no-margin-bottom">发布文章</h2> </div> </div> <li class="no-padding-bottom"> <div class="list-group myList"> <!--搜索文章的条件--> <div class="myTitle"> <form class="form-inline" action="article.jsp" method="get"> <div class="form-group"> <label for="inlineFormInput" class="sr-only">Name</label> <input id="inlineFormInput" name="title" type="text" placeholder="按标题名字查找" class="mr-sm-3 form-control"> </div> <div class="form-group"> <input type="submit" value="查询" class="btn btn-primary"> </div> </form> <input id = "addArt" type="submit" value="发布文章" class="btn btn-primary"> </div> <ul> <li class="list-group-item" action="/article/findAll" method="get"> <table> <thead> <tr> <span>收藏数:100</span> <span> </span> <span> </span> <span> </span> <span>浏览数:<th> </th></span> <p class="h6">作者:<th> </th></p> <p class="h6">时间:<th></th></p> <p style="white-space:nowrap;overflow:hidden;text-overflow: ellipsis"><th></th></p> </tr> </thead> <tbody> <tr> <th scope="row">${article.user_id}</th> <td>${article.browse_count}</td> <td>${article.publish_realname}</td> <td>${publish_date}</td> </tr> </tbody> </table> </li> </ul> <nav class="text-center" aria-label="Page navigation"> <ul class="pagination"> <li> <a href="javascript:" onclick="pre()" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <c:forEach begin="1" end="${pageData.totalPage}" varStatus="i"> <li><a href="/article/findAll?currPage=${i.count}&Title=${Title}">${i.count}</a></li> </c:forEach> <li> <a href="javascript:" onclick="next()" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </div> </li> </section> <jsp:include page="/incloud/footer.jsp" /> </div> </div> </body> </html> <script type="text/javascript"> function pre() { if (${pageData.currPage-1<=0}) { layer.msg('已经到顶啦!'); return; } window.location.href = "/user/findAll?currPage=${pageData.currPage - 1}&realName=${realName}" } //添加文章跳转链接 $("#addArt").click(function () { window.location.href = '/html/article_add.jsp' }); </script>
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值