|
访问父节点和子节点 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>)
|