|
注意,我们也可以在构造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
上一页 [1] [2] [3] [4] 下一页 |