如何遍历MarkLogic中的Sequence值?

时间:2018-07-18 06:15:46

标签: javascript marklogic marklogic-8 marklogic-9

我对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 >

能否请您分享一个示例代码片段,以了解如何使其工作?

2 个答案:

答案 0 :(得分:3)

在特定问题上,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()方法将Sequence转换为JavaScript数组。

然后您可以使用标准的Array方法来迭代,映射或缩小。

如果序列由单个项目组成,则可以将序列传递到fn.head()以获得该项目:

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

话虽如此,但不清楚这个问题是什么。

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

答案 1 :(得分:0)

您可以遍历序列并根据所需条件获得序列的特定值。您遇到问题的基本代码如下。

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