我的数据如下。
<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>
请帮我查询,检索上面指定的数据。
答案 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()替换为新元素。