Поиск значения в элементе с определенным атрибутом - PullRequest
0 голосов
/ 02 октября 2018
<elemA>
  <elemZ mytype ="1">
    <myval>100</myval>
  </elemZ>
  <elemZ mytpe ="2">
    <myval>200</myval>
  </elemZ>
</elemA>

Используя cts: запросы, я хотел бы найти myval 100 в elemZ с mytype = "1".Я не вижу ни одного запроса cts, который позволяет cts:element-query, а также фильтрацию по атрибуту.Даже cts:and-query не кажется полезным.

Без ограничения атрибута, элемент-значение-запрос и два элемента-запроса будут работать легко.

cts:search(doc(), (some cts query?))

1 Ответ

0 голосов
/ 02 октября 2018

Сначала попробуйте этот простой xpath - проверьте, что он работает, и что его не достаточно производительный для вас.

//elemZ[@mytype=1]/myval[. = "100" ]

Это должно вернуть myval дочерние элементы elemZ с mytype =1 и myval text content = "100"

Для более эффективной работы (с cts: query) понадобятся эти "страшные" другие cts: запросы и, возможно, некоторые индексы диапазона.Грубо говоря: (не проверено)

   search(doc(),
     cts:element-query(xs:QName("elemZ"),
       cts:and-query((
         cts:element-attribute-value-query(xs:QName("elemZ"), xs:QName("mytype"), "1"),
         cts:element-value-query(xs:QName("myval"), "100") )) ) )

Рекомендую начать с самого простого выражения, которое делает что угодно , а затем одно за другим добавляет ограничения.

В вашем случае вполне возможно, что оптимизатор запросов оптимизирует простой xpath в соответствующий запрос cts.Стоит попробовать и измерить производительность.Мне лично нравится начинать с базового xpath, а затем работать только с запросом cts: по мере необходимости.

...