flex4.0 根 據指定屬性或節點快速查找 xml 節點
對 XML 內容進行操作時,查找 XML 節點是很重要的一個操作。在 ActionScript 3.0 中,提供了兩 種查找 XML 節點的方式:通過屬性進行查找和通過節點內容 進行能夠查找。
使用屬性進行查找時,可以直接指定查找的內容的表達式。 XML 中,還提供一個 hasOwnProperty 判斷節點中是否存在查找使用屬性。查找表達式支持多條件布爾運算。
var file:String = "<root><nodes>" +
"<node type='1' class='com.ct.core.TextInput' name ='userName1'><child name='y'><haha>wwww</haha></child></node>" +
"<node type='2' class='com.ct.core.TextInput' name ='userName2'>userName2</node>" +
"<node type='3' class='com.ct.core.TextInput' name ='userName2'>userName2</node>" +
"<node type='4' class='com.ct.core.TextInput' name ='userName3'>userName2</node>" +
"<node type='5' class='com.ct.core.TextInput' name ='userName4'><child name='y'><haha>wwww</haha></child></node>" +
"<node type='6' class='com.ct.core.TextInput' name ='userName4'><child name='y'><haha>wwww</haha></child></node>" +
"</nodes></root>";
var xml:XML = new XML(file);
區別 1: type:XMLList
1>.Alert.show(xml.nodes.node.(@name=="userName1"));
返回:
<node type="1" class="com.ct.core.TextInput" name="userName1">
<child name="y">
<haha>wwww</haha>
</child>
</node>
2>.Alert.show(xml.nodes.node.(@name=="userName2"));
返回: type:XMLList
<node type="2" class="com.ct.core.TextInput" name="userName2">userName2</node>
<node type="3" class="com.ct.core.TextInput" name="userName2">userName2</node>
3>.Alert.show(xml.nodes.node.(@name=="userName3"));
返回: type:XMLList
userName3
4>.Alert.show(xml.nodes.node.(@name=="userName1").child.haha);
返回: type:XMLList
wwww
5>.Alert.show(xml.nodes.node.(@name=="userName4").child.haha);
返回: type:XMLList
<haha>wwww</haha>
<haha>wwww</haha>
區別 1 總結:當快速提取根據指定屬性的節點時,
如果相同名稱的節 點的同一屬性名的值一樣的節點個數爲 1 個,則輸出最後節點的 value ,
不管這個屬性是最 後節點的的屬性 (3>,4>) ,或者不是;
如果相同名稱的節 點的同一屬性名的值一樣的個數 2 個或兩個以上的則輸出,最後根節點的的標籤和 value,
不管這個屬性是最 後節點的的屬性 (2>,5>) ,或者不是;
而如果把“ == ”換成其它邏輯符號“ >,<,>=,<=,!= ”也是根據個數跟上面一樣;
如果你要取得最後 節點下還有子節點,則輸出最後根節點的標籤和 value(5>);
6>.var child:String = "node";
var property:String = "name";
var value:String = "userName2";
Alert.show(xml.nodes.child(child).(attribute("name")==value));
返回: type:XMLList
<node type="2" class="com.ct.core.TextInput" name="userName2">userName2</node>
<node type="3" class="com.ct.core.TextInput" name="userName2">userName2</node>
如果你對應的子節 點或屬性不能確定,你能夠用函數 child(String), 或 attribute(String) 在前面的基礎上動態取得你所需要的節點或 value;
7>.Alert.show(xml.nodes.node.elements("child"));
8>.Alert.show(xml.nodes..child);
都返回: type:XMLList
<child name="y">
<haha>wwww</haha>
</child>
<child name="y">
<haha>wwww</haha>
</child>
<child name="y">
<haha>wwww</haha>
</child>
9>.
var file:String = "<root>" +
"<nodes>" +
"<node type='1' class='com.ct.core.TextInput'><name>username2</name></node>" +
"<node type='2' class='com.ct.core.TextInput'><name>username</name></node>" +
"<node type='3' class='com.ct.core.TextInput'><name>username</name></node>" +
"</nodes></root>";
var xml:XML = new XML(file);
Alert.show(xml.nodes.node.(name=="username"));
返回: type:XMLList
<node type="2" class="com.ct.core.TextInput">
<name>username</name>
</node>
<node type='3' class='com.ct.core.TextInput' value='demo'><name>username</name></node>
10>.Alert.show(xml.nodes.node["name"]);
返回: type:XMLList
<name>username2</name>
<name>username</name>
<name>username</name>