我对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 >
能否请您分享一个示例代码片段,以了解如何使其工作?
答案 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]))
话虽如此,但不清楚这个问题是什么。
如果序列具有两个元素项(info
和Entity
),则循环可以在每个项目上使用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()