过滤子节点具有相同名称的项目

时间:2016-12-30 14:57:49

标签: javascript json xml xpath

我有一个大的json blob,我想解析并过滤表单中的参数。 经过一些研究后,我决定尝试使用defiantjs,但是在使用XPath时我遇到了问题,因为它会使我的树变得扁平。

我的数据如下:

 @Override
    public void onPageSelected(int position) {

        listeners[beforePagerPosition].onViewPaused();
        tabLayout.getTabAt(beforePagerPosition).getIcon().setAlpha(getResources().getInteger(R.integer.tab_unselected_alpha));

        beforePagerPosition = position;
        tabLayout.getTabAt(position).getIcon().setAlpha(getResources().getInteger(R.integer.tab_selected_alpha));
        listeners[position].onViewResumed();
        resetMenu();
        hideKeyboard();
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    private void resetMenu() {
        if (getSupportFragmentManager() != null) {
            ParentFragment parentFragment = (ParentFragment) listeners[viewPager.getCurrentItem()];
            FragmentManager fm = parentFragment.getChildFragmentManager();
            if (fm != null && fm.getBackStackEntryCount() > 0) {
                FragmentManager.BackStackEntry backStackEntry = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1);
                String str = backStackEntry.getName();
                BaseMenuFragment fragment = (BaseMenuFragment) fm.findFragmentByTag(str);
                fragment.setHasOptionsMenu(true);
            }
        }
    }

有没有办法搜索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>
</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>

我确实弄乱了查询,但只能在第一个irules节点(?)上获得一个命中,而不是后续的。

奖金问题:

使用javascript(~12MB)解析大量json数据的任何其他建议?

/帕特里克

1 个答案:

答案 0 :(得分:1)

  

正确这是我最接近的{&#39; //virtualserver[contains(./irules, "whatIwanttofind")]&#39; (defiantjs用//启动查询)但是它只返回列表中顶级规则包含的对象&#34; whatIwanttofind&#34;

那是因为contains()函数只期望一个字符串作为第一个参数。如果./irules返回多个元素,则仅评估第一个元素。要避免此问题,您可以修改对{0}个元素应用contains()的XPath:

irules