Как перебрать значение последовательности в MarkLogic?

Я относительно новичок в MarkLogic и использую JavaScript. У меня есть тип объекта Sequence ниже (не тип объекта document или XML). Как я могу выполнить итерацию по его значению, например, я хочу получить значение элемента Property2 в объекте?

<info>
   <title>Entity</title>
   <version>0.0.1</version>
</info>
<Entity>
    <Property1>100487</Property1>
    <Property2>130008HU52</Property2>
    <Property3/>
    <Property4>Wellhead</Property4>
</Entity >

Не могли бы вы поделиться примером фрагмента кода о том, как заставить его работать?


person Ryan    schedule 18.07.2018    source источник
comment
Не могли бы вы поделиться кодом того, что вы пробовали до сих пор? И как вы получили свою последовательность?   -  person grtjn    schedule 19.07.2018


Ответы (2)


Что касается конкретного вопроса, то Sequence – это итерируемая JavaScript, поэтому, если вы работая в JavaScript, вы можете использовать for..of loop для итерации, как показано на рисунке:

http://docs.marklogic.com/guide/jsref/api#id_59096

for (const doc of fn.collection('/my/coll')) {
  // do something with doc
}

Вы также можете превратить Sequence в массив JavaScript с помощью метода toArray().

Затем вы можете использовать стандартные методы массива для итерации, сопоставления или уменьшения.

Если последовательность состоит из одного элемента, вы можете передать последовательность fn.head(), чтобы получить элемент :

fn.head(xdmp.arrayValues([1,2,3]))

При этом из вопроса неясно, какие элементы находятся в последовательности.

Если в последовательности есть два элемента Element (info и Entity), цикл может использовать метод xpath(). на каждом элементе для извлечения подэлементов.

person ehennum    schedule 18.07.2018

Вы можете перебирать последовательность и получать конкретное значение последовательности на основе требуемых критериев. Основной код для вашей проблемы приведен ниже.

let $test := (<info>
 <title>Entity</title>
 <version>0.0.1</version>
</info>,
 <Entity>
  <Property1>100487</Property1>
  <Property2>130008HU52</Property2>
  <Property3/>
  <Property4>Wellhead</Property4>
</Entity >)
return $test[2]/Property2/text()
person Girish Kumar Agrawal    schedule 18.07.2018