如何遍历 MarkLogic 中的序列值?

How to iterate through a Sequence value in MarkLogic?

我对 MarkLogic 比较陌生,正在使用 JavaScript。我下面有一个 Sequence 对象类型(不是文档或 XML 对象类型)。我如何遍历它的值,例如,我想获取实体下 Property2 元素的值?

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

能否分享一个示例代码片段,说明如何让它发挥作用?

您可以迭代序列并根据所需条件获取序列的特定值。您问题的基本代码如下。

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()

在特定问题上,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
}

您还可以使用 toArray() 方法将序列转换为 JavaScript 数组。

然后您可以使用标准数组方法进行迭代、映射或归约。

如果序列由单个项目组成,您可以将序列传递给fn.head()以获取项目:

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

综上所述,从问题中不清楚序列中有哪些项目。

如果序列有两个元素项(infoEntity),循环可以对每个元素使用xpath()方法来提取子元素。