使用Marklogic Xquery数据填充

使用Marklogic Xquery数据填充,xquery,marklogic,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&

我的数据如下

<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>
主动休假终止
05/06/2014 09/10/2014 01/10/2015
我想通过以下方式获得数据

<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>
激活
05/06/2014
离开
09/10/2014
结束
01/10/2015

请帮助我进行查询,以按照上面指定的方式检索数据。

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

let$dates:=tokenize(日期“\s+”)
对于令牌化中$pos处的$status(状态“\s+”)
返回(
{$status},
{$dates[$pos]}
)

好吧,您有一个字符串,希望在WhiteTaps处拆分它。这就是
tokenize()
的用途,
\s
是空白。要获取相应的日期,可以使用
at
获取for循环中的当前位置。它看起来是这样的(注意,我假设输入数据是当前上下文项):

let$dates:=tokenize(日期“\s+”)
对于令牌化中$pos处的$status(状态“\s+”)
返回(
{$status},
{$dates[$pos]}
)

您没有指明数据是在文件系统上还是已经加载到MarkLogic中。也不清楚这是一个小数据集上需要做一次的事情,还是在大量数据的基础上需要做一次的事情

如果它在文件系统上,则可以在加载时对其进行转换。例如

如果您已经加载了内容,并且希望在适当的位置对其进行转换,则可以使用

如果您有少量数据,那么您可以使用查询控制台在其中循环


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

您没有指明数据是在文件系统上还是已经加载到MarkLogic中。也不清楚这是一个小数据集上需要做一次的事情,还是在大量数据的基础上需要做一次的事情

如果它在文件系统上,则可以在加载时对其进行转换。例如

如果您已经加载了内容,并且希望在适当的位置对其进行转换,则可以使用

如果您有少量数据,那么您可以使用查询控制台在其中循环


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

请注意,你应该始终展示你已经尝试过的东西!这一次我回答了,但社会普遍不理解这样的问题。尽管如此,欢迎来到这里!请注意,你应该始终展示你已经尝试过的东西!这一次我回答了,但社会普遍不理解这样的问题。尽管如此,欢迎来到这里!