XML是一种简单的数据存储语言,使用一系列简单的标记描述数据。
1.使用XML类的构造函数创建XML对象
使用XML类创建XML对象的语法格式如下:
var 变量名:XML= new XML(value);
其中,参数value为可以通过XML()全局函数转换为XML对象的任意对象。
例如:
var value:String= "<student><name>王林</name><sex>男</sex><age>20</age> </student>";
var valueXML:XML=new XML(value);
trace(valueXML.toXMLString());
trace(valueXML.name); //输出王林
2.使用XML文本创建XML对象
使用这种方法的优点是,程序在编译时会自动忽略文本中的空白字符,所以在定义XML对象时,XML文本的换行符和制表符等空白字符对程序都没有影响,
例如,以下语句使用XML文本创建了一个XML对象:
var stu:XML= <student>
<name>王林</name>
<sex>男</sex>
<age>20</age>
</student>;
trace(stu.toXMLString());
向XML对象添加新元素的方法有四种,即使用点运算符“.”和“[ ]”操作符添加元素;使用XML类的insertChildBefore()和insertChildAfter()方法添加元素。
(1)使用“.”添加元素。
使用点运算符添加元素是最常用的添加元素的方法,语法格式如下:
XML对象.新元素名=元素内容;
例如:
var stu:XML=<student></student>;
stu.name= "王林";
trace(stu.toXMLString());
(2)使用“[ ]”添加元素。
如果新增加的元素名是由变量动态指定的,则不能直接使用点运算符完成添加,这时可以使用“[ ]”操作符添加元素,语法格式如下:
XML对象[变量名]=内容;
(3)使用insertChildBefore()方法和insertChildAfter()方法添加元素。
XML对象提供了两个非常常用的方法添加元素,即insertChildBefore()方法和insertChildAfter()方法,
这两个方法都是以当前元素为基础进行元素的添加。
语法格式如下:
insertChildBefore(XML元素, 新元素);
insertChildAfter(XML元素, 新元素);
insertChildBefore()方法是在某个XML元素的前面插入新元素,而insertChildAfter()方法则是在某个XML元素的后面插入新元素。
例如:
var bookXML:XML =
<books>
<book>
<name>Flex 教程</name>
<author>张三</author>
</book>
<book>
<name>Eclipse 教程</name>
<author>李四</author>
</book>
</books>;
//在第一个<book>节点前添加元素
bookXML.insertChildBefore(bookXML.book[0],<book><name>C# 教程</name></book>);
//在添加元素后的第一个<book>节点后添加元素
bookXML.insertChildAfter(bookXML.book[0],<book><name>Struts教程</name></book>);
trace(bookXML);
2.添加属性
需要使用“@”或“[ ]”操作符为XML对象的XML节点里添加属性。
(1)使用“@”操作符添加属性。
一般要表示属性时,在属性名前面加“@”符号。如果要为XML对象中的某个元素添加属性和值,则使用点运算符和“@”操作符共同实现。语法格式如下:
XML对象.元素名.@属性名=值;
(2)使用“[ ]”操作符添加属性。
与添加元素一样,如果属性名是由变量动态指定的,则需要使用“[ ]”操作符添加属性。语法格式如下:
XML对象.元素名.@[属性名]=值;
3.读取元素和属性
读取节点元素内容和属性值,可以使用“.”运算符和“@”操作符完成。例如:
var bookXML:XML =
<book>
<name>Flex 教程</name>
<author age="25">张三</author>
<time>2008年7月</time>
</book>;
trace(bookXML.name); //输出结果:Flex教程
trace(bookXML.author.@age); //输出结果:25
使用“*”代替属性名,表示读取所有的属性值。例如:
trace(bookXML.author.@*);
4.删除元素和属性
删除XML中的元素和属性时使用delete语句,语法格式如下:
delete XML对象.元素名;
delete XML对象.元素名.@属性名;
例如:
var bookXML:XML =
<book>
<name>Flex 教程</name>
<author age="25">张三</author>
<time>2008年7月</time>
</book>;
delete bookXML.name;
delete bookXML.author.@age;
trace(bookXML);
XMLList类的用法如下例所示:
var bookXML:XML =
<books>
<book>
<name>Flex 教程</name>
<author sex="男">张三</author>
<time>2008年7月</time>
</book>
<book>
<name>Eclipse 教程</name>
<author>李四</author>
<time>2009年2月</time>
</book>
</books>;
//获得XMLList对象
var bookList:XMLList = bookXML.elements();
//循环遍历XMLList对象
for each(var xmlData:XML in bookList)
{
//获得每一个book对象的name节点内容
trace(xmlData.name);
}
XMLListCollection类也不是核心类,所以在使用XMLListCollection类之前首先要使用import语句引入该类,
如下所示:
import mx.collections.XMLListCollection;
创建XMLListCollection对象的语法格式如下:
var 变量名:XMLListCollection = new XMLListCollection(XMLList对象);
创建对象后,使用XMLListCollection类的addItem()方法在XML列表的尾部增加节点;使用addItemAt()方法在XML列表的指定索引处增加节点,
语法格式如下:
XMLListCollection对象.addItem(节点);
XMLListCollection对象.addItemAt(节点,索引);
============================================================================================================================================================================================================
Date对象:
根据参数的不同,创建Date对象的情况分为以下四种。
1.未给定参数
如果创建Date对象时Date()构造函数没有指定参数,则按照所在时区的本地时间,返回包含当前日期和时间的Date对象。语法格式如下:
var 变量名:Date = new Date();
例如:
var now:Date=new Date();
trace(now.toString()); //返回当前时间 格式是世界时间的格式
2.给定一个数字参数
如果仅给定了一个数字参数,则Date()构造函数将其视为自GMT时间1970年1月1日以来经过的毫秒数,并且返回对应的Date对象。语法格式如下:
var 变量名:Date = new Date(val);
例如,创建一个设置为1970年1月1日过完一天的日期和时间对象:
var val:int=1000*60*60*24
var startTime:Date=new Date(var);
trace(startTime); //输出结果:Fri Jan 2 08:00:00 GMT+0800 1970
3.给定一个字符串参数
如果给定一个字符串参数,则Date()构造函数将尝试将字符串解析为日期和时间两个部分,然后返回对应的Date对象。语法格式如下:
var 变量名:Date = new Date(str);
字符串参数str必须包含一个有效日期,否则将解析错误。日期可以有多种格式,但必须至少包括月、日和年。例如,“Feb 1 2005”是有效的,
而“Feb 2005”则是无效的。
(此种方法基本不用,因为和常用的中国时间格式不同。)
4.给定多个数字参数
如果给定多个数字参数,则Date()构造函数将这些参数分别视为年、月、日、小时、分钟、秒和毫秒,并返回一个对应的Date对象。
语法格式如下:
var 变量名:Date = new Date(year, month, date, hour, minute, second, millisecond);
date对象的属性:
1.读取Date类的属性
Date类主要包含以下几个属性用于存储日期和时间中特定的值。
(1)fullYear和本地fullYearUTC属性。fullYear属性按照时间返回Date对象中的完整年份值。
fullYearUTC属性则按照通用时间(UTC)返回Date对象中的四位数年份值。
(2)month和monthUTC属性。month和monthUTC属性分别按照本地时间和UTC时间返回Date对象的月份值
(3)date和dateUTC属性。date和dateUTC属性分别按照本地时间和UTC时间返回Date对象指定的月中某天的值。
(4)day和dayUTC属性。返回Date对象所指定的星期值。
(5)hours、minutes、seconds、milliseconds,以及hoursUTC、minutesUTC、secondsUTC、millisecondsUTC。
这些属性返回Date对象指定的小时、分钟、秒和毫秒的值。
(6)time属性。按照UTC返回Date对象中自1970年1月1日午夜以来的毫秒数。
(7)timezoneOffset属性。返回计算机的本地时间和通用时间(UTC)之间的差值(以分钟为单位)。
这些属性全部对应有相对的get和set方法,如果需要设置 调用即可,查看相应的api
而在时间格式化的时候调用DateFormatter类即可
例:
var date:Date = new Date();
var datefor: DateFormatter = new DateFormatter;
datefor.formatString = "YYYY MM DD";
dateStr = datefor.format(date);
Alert.show(dateStr);
上面的代码就实现了dete格式化,将当前时间转换成了 年份 月份 日期的形式排列出来,转换时不用在意中间是空格 还是- 这些全部可以
自定义,核心的参照api YYYY年份 MMM月份 DD天数 JJ小时(23小时制) NN 分钟 SS秒
还有一个常用的工具类是DateFormatter的静态方法 ,可以将字符串转换为date对象,相对较常用。
DateFormatter.parseDateString(String)
需要注意的是该方法转换时,参数字符串需要符合一定的规则,否则会转换失败。
::已设置为 String 格式的日期转换为 Date 对象。月份名称和日期名称必须符合 mx.formatters.DateBase 中的名称。
String 的小时值必须介于 0 和 23(含)之间。分钟和秒的值必须介于 0 和 59(含)之间。以下示例使用此方法创建 Date 对象。
Flex入门 -----------数据验证
Flex 4中内建的数据验证组件主要包括NumberValidator(数字验证)、CurrencyValidator(货币验证)、PhoneNumberValidator(电话号码验证)、
StringValidator(字符串验证)、ZipCodeValidator(邮政编码验证)、CreditCardValidator(信用卡验证)、DateValidator(日期验证)、
EmailValidator(电子邮件验证)和RegExpValidator(正则表达式验证)等。
Validator类实现的功能是使验证程序生成必填字段。
Validator类的常用属性和事件如下所示。
(1)enabled
(2)source
(3)property
(4)required
(5)requiredFieldError
(6)trigger
(7)triggerEvent
NumberValidator组件主要用于检验字符串是否为有效数字,除此之外还可以验证是否为整数,以及验证是否为给定范围内的数等。
NumberValidator组件除了继承Validator类的属性以外,还有如下一些常用属性。
(1)allowNegative
(2)maxValue
(3)minValue
(4)domain 要验证的数字类型。允许的值为 "real" 和 "int"。
(5)precision
(6)decimalSeparator
(7)thousandsSeparator
(8)negativeError
(9)exceedsMaxError
(10)lowerThanMinError
(11)integerError
(12)precisionError
(13)separationError
(14)decimalPointCountError
(15)invalidCharError
(16)invalidFormatCharsError
(17)source 要验证的input标签的id
(18)property 要验证的标签内容,通常为text
范例:
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.ValidationResultEvent;
private function numberValidator_invalid(evt:ValidationResultEvent):void {
Alert.show(evt.message);
}
private function numberValidator_valid(evt:ValidationResultEvent):void {
Alert.show(evt.type);
}
]]>
</mx:Script>
<mx:NumberValidator id="numberValidator"
domain="{comboBox.selectedItem}"
source="{textInput}"
property="text"
trigger="{button}"
triggerEvent="click"
invalid="numberValidator_invalid(event);"
valid="numberValidator_valid(event);" />
<mx:ApplicationControlBar dock="true">
<mx:Form styleName="plain">
<mx:FormItem label="domain:">
<mx:ComboBox id="comboBox"
dataProvider="[real,int]" />
</mx:FormItem>
</mx:Form>
</mx:ApplicationControlBar>
<mx:Form defaultButton="{button}">
<mx:FormItem direction="horizontal">
<mx:TextInput id="textInput"
restrict="0-9.-"
maxChars="10" />
<mx:Button id="button"
label="validate" />
</mx:FormItem>
</mx:Form>
NumberValidator组件使用<mx:NumberValidator>标签定义,NumberValidator组件是非可视化组件,需要被包含在<fx:Declarations>标签中。
********上例只是举个例子,需要注意的是在textInput标签中的restrict也是用于表单验证的,直接可以匹配正则表达式,常用.
其他验证还有 电话验证 邮箱验证等等 原理相同不一一介绍了。
而与验证对应的,还有很多响应的数字格式化及date格式化等等组件。详情查看api即可。