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>