【问题标题】:Filter items where child nodes has the same name过滤子节点同名的项目
【发布时间】:2016-12-30 14:57:48
【问题描述】:

我有一个大的 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>

有什么方法可以搜索ie。包含“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 (~12MB) 解析大量 json 数据的任何其他建议?

/帕特里克

【问题讨论】:

  • 为什么是 XML?没有人使用它。使用 JSON
  • 额外评论:你自己试过什么?
  • @patrikj 您需要获取项目节点的路径吗?您尝试了哪个 xpath?
  • @Jonasw 我是。但是 defiantjs 正在将其转换为 xml 以便能够将 XPath 应用于它
  • @eLRuLL 正确 这是我最接近的 '//virtualserver[contains(./irules, "whatIwanttofind")]' (defiantjs 以 // 开始查询)但是它只会返回对象其中列表顶部的规则包含“whatIwanttofind”。

标签: javascript json xml xpath


【解决方案1】:

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

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

//virtualserver[irules[contains(., "whatIwanttofind")]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多