高速で効率的にXMLデータを検索します。


http://bbs.9ria.com/viewthread.php?tid=75361&extra=page%3D1%26amp;ordeby%3 D dateline%26 amp;filter%3 D 2592000
プロジェクトグループの中で、多くの人はXMLをデータの引継ぎ橋として使用しています。XMLに対して大量の検索と抽出が行われています。例えば、下記のXMLファイル:
XML/HTMLコード

var xml:XML=<xml>   
<item id="6" title="    "/>   
<item id="12" title="    "/>   
<item id="43" title="shch8.com"/>   
<item id="26" title="webBase"/>   
<item id="17" title="shch8.com/webbase"/>   
</xml>; 
IDが20より大きいデータを抽出したいですが、どうしますか?
forとifサイクルでid>20を判断して、もしあなたが本当にこのようにするならば、このblogを見て、このため幸運と感じるべきです!
私は3000個のデータを持っていますが、まだforを使うと、大変な過程です。
1.AS 3のXMLはE 4 Xの処理標準を実現しました。XMLとXMLListの値取り方法に協力して、XMLデータを柔軟に操作することができます。正しいやり方はこれです。
AS 3コード

trace(xml.child("*").(@id>20))    
/*     
<item id="43" title="shch8.com"/>   
<item id="26" title="webBase"/>   
*/ 
もちろん、このように書いてもいいです。
AS 3コード
trace(xml.item.@id>20)  
XML结点名を使って値を取ります。结果は同じです。
2.続いて、私達はtitleに対して検索もできます。コード:
AS 3コード

var xml:XML=<xml>    
<item id="6" title="    "/>    
<item id="12" title="    "/>    
<item id="43" title="shch8.com"/>    
<item id="26" title="webBase"/>    
<item id="17" title="shch8.com/webbase"/>    
</xml>;    
var searchKey:String="  "   
trace(xml.child("*").(@title.indexOf(searchKey)!=-1));    
/*     
<item id="6" title="    "/>   
<item id="12" title="    "/>   
*/  
3.私がダサいと言っているかもしれませんが、indexOfで文字を判断してもいいです。なぜ正規表現を使わないですか?はい、このように書いてもいいです。
AS 3コード

xml.child("*").(pattern.test(@title));  
しかし、これはRegExpで識別できる方法ではありません。関数エージェントの判断を書きます。
AS 3コード

var xml:XML=<xml>       
<item id="6" title="    "/>       
<item id="12" title="    "/>       
<item id="43" title="shch8.com"/>       
<item id="26" title="webBase"/>       
<item id="17" title="shch8.com/webbase"/>       
</xml>;       
var searchKey:String="shch"      
var pattern:RegExp=new RegExp(searchKey);       
trace(xml.child("*").(regTest(@title)));    
function regTest(obj:String):Boolean{       
return pattern.test(obj)       
    }       
/*       
<item id="43" title="shch8.com"/>     
<item id="17" title="shch8.com/webbase"/>     
*/ 
 
4.最後に私達が取ったデータは全部xmlListタイプです。もしXMLで操作するのが好きなら、もう一つXMLオブジェクトを作成できます。
AS 3コード

var xml:XML=<xml>       
<item id="6" title="    "/>       
<item id="12" title="    "/>       
<item id="43" title="shch8.com"/>       
<item id="26" title="webBase"/>       
<item id="17" title="shch8.com/webbase"/>       
</xml>;       
var searchKey:String="shch"      
var pattern:RegExp=new RegExp(searchKey);       
var getXML:XML=<data/>       
getXML.appendChild(xml.child("*").(regTest(@title)))       
trace(getXML)       
function regTest(obj:String):Boolean{       
return pattern.test(obj)       
    }       
/*       
<data>   
  <item id="43" title="shch8.com"/>   
  <item id="17" title="shch8.com/webbase"/>   
</data>   
*/