+ -
当前位置:首页 → 问答吧 → 关于XML 属性的 search 问题,大家有没有高招?

关于XML 属性的 search 问题,大家有没有高招?

时间:2011-03-15

来源:互联网

总的来说,先有个XML文档,里面有些属性;再用个function,传参数 key 对XML特定的内容检索,检索结果放到一个数组personAry里,
后来一想,是不是可以再设一个参数,对XML灵活检索呢?

一个 key,特定内容name检索:
复制内容到剪贴板
代码:
var myXML:XML=
<topNode>
    <person name='张三' sex='男' blood='AB'><info>一些别的内容</info></person>
    <person name='李四' sex='男' blood='O'><info>一些别的内容</info></person>
    <person name='王五' sex='女' blood='AB'><info>一些别的内容</info></person>
</topNode>
search("张三");
function search(key:String){
    
    var personAry:Array=new Array();
    
    for(var i:uint=0; i<myXML.person.length(); i++){
        if( (myXML.person[i].@name).indexOf(key) !=-1 ){
            personAry.push(myXML.person[i]);
        }//if
    }//for
    
    trace(personAry);
}
后来想,是不是可以灵活用这个参数检索呢?比如对“血型blood”为"AB",或性别男女检索,如:
复制内容到剪贴板
代码:
search("blood","AB");
function search(pro:String,key:String){
    ...
    if( (myXML.person[i].@pro).indexOf(key) !=-1 )
    ...
}
然而,里面的代码这个会出错,高人有高见吗?

[ 本帖最后由 APLee 于 2011-3-15 17:44 编辑 ]

作者: APLee   发布时间: 2011-03-15

抽象一下。
比如這個地方的什myXML.person[i].@name).indexOf(key) !=-1。

你可由抽象出一個類。SearchFilterGroup
定義
get filters():Vector.<ISearchFilter>
addFilter(filter:ISearchFilter):void;


然後定義這個接口
interface ISearchFilter
中定義方法
function match(node1:XMLList, ...):Boolean 參數根據具體需要設定。


那麽你的search方法就可以改寫成
search(filterGroup:SearchFilterGroup):void {
  for(xxxxxxxxxxxx) {
    if(filterGroup.filters[i].match(xxxxx) {
      // 加入到搜索結果。
    } else {
      continue;
    }
  }
}

調用search方法時
var filterGroup:SearchFilterGroup = new SearchFilterGroup();
filterGroup.addFilter(new NameFilter());
filterGroup.addFilter(new SexFilter());


NameFilter  SexFilter各自實現接口。
如果多個接口麻煩。可以把接口實現為
class FilterAdapter  implements ISearchFilter
然後在構造函數中傳入指定的篩選參數。就變成
filterGroup.addFilter(new FilterAdapter (“name"));
filterGroup.addFilter(new FilterAdapter ("sex"));



這個是一個描述。沒有仔細的跟你説具體的實現寫法。
希望先給你一些啓發。如果不行我再後續繼續幫你細化這些實現的代碼。
希望你能從中學到東西。而不是只是要完成這個東西。

[ 本帖最后由 enc0717 于 2011-3-15 18:01 编辑 ]

作者: enc0717   发布时间: 2011-03-15

意思就是先要确立接口,
接口的目的和主要工作就是确定要检索的是哪个属性,然后再是key,是这样理解的哇?

作者: APLee   发布时间: 2011-03-15