你没有提到你使用的XQuery处理,但是如果它有包含HashMap,你可以做这样(在MarkLogic服务器测试):
let $seq := ("ADD X", "ADD Y", "REMOVE Z", "ADD X", "NO-ACTION Y")
let $map := map:map()
let $_ :=
for $s in $seq
let $parts := fn:tokenize($s, " ")
let $service := $parts[2]
let $action := $parts[1]
let $current-action := map:get($map, $service)
return
if ("NO-ACTION" = ($action, $current-action)) then
map:put($map, $service, "NO-ACTION") (: rule 1 :)
else if ("REMOVE" = ($action, $current-action)) then
map:put($map, $service, "REMOVE") (: rule 2 :)
else
map:put($map, $service, $action) (: actions are the same -- rule 3 :)
for $service in map:keys($map)
return fn:concat(map:get($map, $service), " ", $service)
返回
ADD X
REMOVE Z
NO-ACTION Y
请注意,我做了一个简化的假设,并将“NO ACTION”更改为“NO-ACTION”,以使解析更简单。
是否按顺序处理输入列表? – Svante
不是。该列表来自xml。 –
对不起,但你不明白我在问什么。结果似乎取决于输入元素的顺序。 – Svante