关于XML 属性的 search 问题,大家有没有高招?
时间:2011-03-15
来源:互联网
总的来说,先有个XML文档,里面有些属性;再用个function,传参数 key 对XML特定的内容检索,检索结果放到一个数组personAry里,
后来一想,是不是可以再设一个参数,对XML灵活检索呢?
一个 key,特定内容name检索:
[ 本帖最后由 APLee 于 2011-3-15 17:44 编辑 ]
后来一想,是不是可以再设一个参数,对XML灵活检索呢?
一个 key,特定内容name检索:
复制内容到剪贴板
<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",或性别男女检索,如:
代码:
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);
}
复制内容到剪贴板
function search(pro:String,key:String){
...
if( (myXML.person[i].@pro).indexOf(key) !=-1 )
...
}
然而,里面的代码这个会出错,高人有高见吗?代码:
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 编辑 ]
比如這個地方的什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,是这样理解的哇?
接口的目的和主要工作就是确定要检索的是哪个属性,然后再是key,是这样理解的哇?
作者: APLee 发布时间: 2011-03-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28