Flex XML搜索、匹配

-

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
 3                xmlns:s="library://ns.adobe.com/flex/spark" 
 4                xmlns:mx="library://ns.adobe.com/flex/mx" 
 5                minWidth="955" minHeight="600"
 6                creationComplete="init()">
 7     
 8     <fx:Script>
 9         <![CDATA[
10             import mx.events.FlexEvent;
11             import mx.utils.StringUtil;
12             
13             import spark.events.TextOperationEvent;            
14             
15             public var listshow:XML=
16                 <apps name="计算机课程">
17                 <item name="算法与数据结构"/>
18                 <item name="分布式计算"/>
19                 <item name="计算机网络"/>
20                 <item name="分布式系统"/>
21                 </apps>;
22             [Bindable]
23             public var listnew:XML=null; //搜索过滤后的数据
24             
25             public function  init():void
26             {
27                 getData();
28             }
29             protected function textinput_change(event:TextOperationEvent):void
30             {
31                  getData();
32             }
33             protected function getData():void
34             {
35                 //删除字符串的开头末尾的空格
36                 if(StringUtil.trim(textinput.text)=="")
37                 {
38                     listnew=listshow;
39                 }else{
40                     createNewXML(textinput.text,listshow);
41                 }
42                 //打开或关闭指定项目下的所有树项目。如果设置 dataProvider 之后立即调用 expandChildrenOf()
43                 //则您可能看不到正确的行为。您应该等待对组件进行验证或调用 validateNow()方法 
44                 tree.validateNow();
45                 expandtree();
46             }
47             //搜索过滤产生新的XML
48             private function createNewXML(str:String,xml:XML):void
49             {
50                 listnew=<apps name="计算机课程" />;
51                 for(var i:int=0;i<xml.children().length();i++)
52                 {
53                     var itemxml:XML=xml.child("item")[i];
54                     if(isInStr(str,itemxml.@name.toString()))
55                         listnew.appendChild(itemxml);                
56                 }
57             }
58             //判断search_str是否在str中
59             public function isInStr(search_str:String,str:String):Boolean
60             {
61                 var num:int=str.indexOf(search_str);
62                 if(num>-1)
63                 {
64                     return true;
65                 }else return false;
66             }
67             protected function expandtree():void
68             {
69                 for each(var itemxml in this.tree.dataProvider)
70                 this.tree.expandChildrenOf(itemxml,true);
71             }
72         ]]>
73     </fx:Script>
74     <s:Panel width="767" height="361" title="演示实例">
75     <s:TextInput id="textinput" x="10" y="10" width="174" height="32"
76                  change="textinput_change(event)" prompt="请输入要搜索的关键词"/>    
77     <mx:Tree id="tree" x="10" y="50" width="174" height="208" dataProvider="{listnew}"
78              labelField="@name"/>
79     <s:Label x="14" y="263" height="28" text="更多例子 请关注:www.baidu.com"/>
80     </s:Panel>
81 </s:Application>

效果图:

搜索结果:

 参考文献:http://www.oschina.net/code/snippet_853151_21508

posted @ 2013-11-27 16:20  Mars、少年  阅读(340)  评论(0编辑  收藏  举报