2015-06-18 80 views
0

我有如下方式的數據。使用Marklogic Xquery數據填充

<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

請注意,你應該_always_顯示你已經嘗試過!我這次回答,但一般社區不讚賞這樣的問題。儘管如此,歡迎來到SO! – dirkk

回答

3

那麼,你有一個字符串,並希望將它拆分成白色的外殼。這就是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

你沒有說明你的數據是否是文件系統或已裝入MarkLogic。目前還不清楚這是否是您需要對一小部分數據進行一次處理,或者持續處理大量數據。

如果它位於文件系統上,則可以在加載它時將其轉換。例如,MarkLogic Content Pump can apply a transformation during load

如果您已經加載了內容,並且想要對其進行轉換,則可以使用Corb2

如果您有少量數據,那麼您可以使用查詢控制檯在它之間循環。

無論您如何應用轉換代碼,dirkk的答案都會顯示您需要如何更改轉換代碼。如果您正在更新數據庫中已有的內容,則會將xdmp:node-delete()原始的Status和date元素和xdmp:node-insert-child()添加到新的。