使用Marklogic Xquery数据填充

时间:2015-06-18 15:20:18

标签: xquery marklogic

我的数据如下。

<Status>Active Leave Terminated</Status>
<date>05/06/2014 09/10/2014 01/10/2015</date>

我想以下面的方式获取数据。

<status>Active</Status>
<date>05/06/2014</date>

<status>Leave</Status>
<date>09/10/2014</date>

<status>Terminated</Status>
<date>01/10/2015</date>

请帮我查询,检索上面指定的数据。

2 个答案:

答案 0 :(得分:3)

嗯,你有一个字符串,想要在whitestapces上拆分它。这是tokenize()的用途,\s是一个空格。要获得相应的日期,您可以使用at获取for循环中的当前位置。它看起来像这样(请注意,我假设输入数据是当前上下文项):

let $dates := tokenize(date, "\s+")
for $status at $pos in tokenize(Status, "\s+")
return (
  <status>{$status}</status>,
  <date>{$dates[$pos]}</date>
)

答案 1 :(得分:1)

您没有说明您的数据是在文件系统上还是已加载到MarkLogic中。目前还不清楚这是你需要在一小组数据上进行一次,还是在持续进行大量数据的情况下进行。

如果它在文件系统上,您可以在加载时对其进行转换。例如,MarkLogic Content Pump can apply a transformation during load

如果您已经加载了内容并且想要对其进行转换,则可以使用Corb2

如果您有少量数据,那么您可以使用Query Console循环遍历它。

无论您如何应用转换代码,dirkk的答案都会显示您需要如何更改它。如果要更新数据库中已有的内容,则xdmp:node-delete()将显示原始状态和日期元素,将xdmp:node-insert-child()替换为新元素。