2016-12-30 2 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> 

Есть ли способ для поиска, т.е.. узел irules, который содержит «fgh»? В случае ниже я бы тогда получить только первый элемент:

<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, но не последующие (?).

Бонус вопрос:

Любые другие рекомендации для разбора большого abounts данных JSON с JavaScript (~ 12MB)?

/Patrik

+0

Почему XML ?? Никто не использует это. Используйте JSON –

+2

** Бонусный комментарий: ** что вы пробовали? – 1252748

+0

@patrikj вам нужен путь для получения узла элемента? какой xpath вы попробовали? – eLRuLL

ответ

1

Correct Это ближайший я пришел «//virtualserver[contains(./irules, "whatIwanttofind")]» (defiantjs запускает запросы с //) Однако было бы возвращать только объекты, где верхний правило в списке содержит «whatIwanttofind»

Это потому, что функция ожидать только одна строка в качестве первого параметра. В случае, если ./irules возвращает несколько элементов, будет оцениваться только первый. Чтобы избежать этой проблемы, вы можете изменить XPath претендует проверку на индивидуальном irules элемента:

//virtualserver[irules[contains(., "whatIwanttofind")]] 
Смежные вопросы