2016-12-30 19 views
0

大きなjsonブロブがあり、これをフォームのパラメータに基づいて解析してフィルタリングしたいと思っています。 いくつかの調査の後、私はdefiantjsを試すことにしましたが、XPathを使用してツリーを平らにするときに問題にぶち当たっています。子ノードの名前が同じフィルタ項目

私のデータは次のようになります。

<d:item d:mi="36"> 
    <name d:constr="String" d:mi="15">/Vip/myvip</name> 
    <irules d:mi="23"> 
     <name d:constr="String" d:mi="22">abcde</name> 
    </irules> 
    <irules d:mi="25"> 
     <name d:constr="String" d:mi="24">fgh</name> 
    </irules> 
    <irules d:mi="27"> 
     <name d:constr="String" d:mi="26">ijkl</name> 
    </irules> 
</d:item> 
<d:item d:mi="37"> 
    <name d:constr="String" d:mi="15">myitem2</name> 
    <irules d:mi="23"> 
     <name d:constr="String" d:mi="22">mnop</name> 
    </irules> 
    <irules d:mi="25"> 
     <name d:constr="String" d:mi="24">qrst</name> 
    </irules> 
</d:item> 

はすなわちを検索する方法はあります。 "fgh"を含むirulesノード?私は、唯一の最初のアイテムになるだろう下回る場合:

<d:item d:mi="36"> 
    <name d:constr="String" d:mi="15">/Vip/myvip</name> 
    <irules d:mi="23"> 
     <name d:constr="String" d:mi="22">abcde</name> 
    </irules> 
    <irules d:mi="25"> 
     <name d:constr="String" d:mi="24">fgh</name> 
    </irules> 
    <irules d:mi="27"> 
     <name d:constr="String" d:mi="26">ijkl</name> 
    </irules> 

を私は、クエリの周りいじるんでしたが、唯一、後続のもの最初のiRulesノード上のヒットを得ることはありませんでした(?)。

ボーナス質問:

JavaScriptでJSONデータの大abountsを解析するための任意の他の勧告(〜12メガバイト)?

/パトリック

+0

なぜXMLを?誰もそれを使用しません。 Use JSON –

+2

**ボーナスコメント:**あなたは何を試しましたか? – 1252748

+0

@patrikjアイテムノードを取得するためのパスが必要ですか?どのxpathを試しましたか? – eLRuLL

答えて

1

正しいこれは、私が「//virtualserver[contains(./irules, "whatIwanttofind")]」それだけでリストの一番上のルールは「whatIwanttofind」が含まれているオブジェクトを返しますが(defiantjsは//を使用してクエリを開始します)来た最も近いです

関数は、最初のパラメータとして1つの文字列しか必要としないためです。複数の要素を返す./irulesの場合は、最初の要素だけが評価されます。この問題を回避するには、個々のirules要素にチェックを適用するXPath変更することができます。

//virtualserver[irules[contains(., "whatIwanttofind")]] 
関連する問題