2012-02-07 8 views
0

Filtering XML based on multiple params - Flexの質問に従ってください。パラメータに基づいた動的なXMLフィルタリング

私は、クエリ部分を動的に作成して、パラメータとキーが基準部分を構築するために引き継ぐようにしていました。ただ、表示する:

//building a dynamic query like this 
var q1:String = "descendants (\"E1") == \"111\")"; 
Alert.show("Query>>"+q1.toString());  // Output: descendants ("E1") == "111" 

var r2:XMLList = xmlData..*.(descendants ("E1") == "111"); //returns correct result 
var r1:XMLList = xmlData..*.(q1.toString()); // weird response, 
               // doesn't filter out anything 

コメントここFiltering XML based on multiple params - Flexは、括弧内の式は、文字列であってはならないと述べています。合意した

ので、XMLに複数のパラメータをフィルタリングするための他のアプローチは、我々は動的に検索クエリを構築しているため、現在、検索のparamsに基づいて、ワークアウトされていない、 descendants()を使用するよりも、あるのでしょうか?

ポインタやアイデアは大きな助けになるでしょう。

答えて

0

ループでフィルタリングするのはどうですか?

var filters : Array = [ { key : "E1", value : "333" }, { key : "D1", value : "333" } ]; 

var searchItem : XMLList = xmlData.*; 
for each (var filter:Object in filters) 
    searchItem = searchItem.(descendants (filter.key) == filter.value); 

trace (searchItem); 
+0

はい、わかりました。しかし、1つ以上の入力パラメータに応じて、子孫として検索される1つ以上のパラメータを持つ動的クエリを作成しようとしています。 – Bob

+0

私は自分の答えを変えました。 xmlData。*はすべての子孫ではなく、ルートノードの子を返します。そうでなければ、同じサブツリーを小さなチャンクで繰り返し返すことができます。 – weltraumpirat

+0

これはうまくいくはずです。私たちは、同じリストを異なる子孫に繰り返しています。すばらしいです。 – Bob

関連する問題