2016-12-30 147 views
0

我有一个大的json blob,我想要解析和筛选表单中参数的baser。 经过一番研究,我决定尝试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节点,但没有后续者上一击(?)。

奖金的问题:

解析JSON数据的大abounts与JavaScript(〜12MB)任何其他建议?

/帕特里克

+0

为什么XML?没有人使用它。使用JSON –

+2

**奖励评论:**你有什么尝试过自己? – 1252748

+0

@patrikj你需要获取物品节点的路径吗?你试过哪个xpath? – eLRuLL

回答

1

正确这是我来了“//virtualserver[contains(./irules, "whatIwanttofind")]”(defiantjs始于//查询),但是它只会返回其中在列表顶部规则包含“whatIwanttofind”对象最接近

这是因为函数期望只有一个字符串作为第一个参数。如果./irules返回多个元素,则只评估第一个元素。为避免此问题,您可以修改XPath应用检查个人irules元素:

//virtualserver[irules[contains(., "whatIwanttofind")]] 
相关问题