gpt4 book ai didi

xquery - fn :replace to return one string on iteration

转载 作者:行者123 更新时间:2023-12-01 12:14:19 25 4
gpt4 key购买 nike

我希望通过使用映射的键值对来实现对文档中字符串的查找和替换。由于 2 个映射值,我目前拥有的代码似乎返回 2 个字符串。我希望返回一个字符串,其中花括号中的值被映射中的值替换。

let $text:='On ${date} the value of alert is ${alerts}'
let $params:= map:map()
let $noop:=map:put($params,'date','TESTINGDATE')
let $noop:=map:put($params,'alerts','TESTALERT')


let $formatted-message:=for $keys in map:keys($params)
let $message:=fn:replace($text,fn:concat('\$\{',$keys,'\}'),map:get($params,$keys))
return $message

return $formatted-message

最佳答案

你可以使用递归函数:

declare function local:replace-all($text, $key, $rest, $params) 
{
if (fn:empty($key)) then
$text
else
local:replace-all(fn:replace($text, fn:concat('\$\{',$key,'\}'), map:get($params,$key)),
fn:head($rest),
fn:tail($rest),
$params)

};

let $text:='On ${date} the value of alert is ${alerts}'
let $params:= map:map()
let $noop:=map:put($params,'date','TESTINGDATE')
let $noop:=map:put($params,'alerts','TESTALERT')
let $keys := map:keys($params)
return
local:replace-all($text, fn:head($keys), fn:tail($keys), $params)

或者您可以使用 fn:fold-left() :

let $text:='On ${date} the value of alert is ${alerts}'
let $params:= map:map()
let $noop:=map:put($params,'date','TESTINGDATE')
let $noop:=map:put($params,'alerts','TESTALERT')
let $keys := map:keys($params)
return
fn:fold-left(
function($text, $keys) {
let $key := fn:head($keys)
return
fn:replace($text, fn:concat('\$\{',$key,'\}'), map:get($params,$key))
},
$text,
$keys
)

两者都产生:

On TESTINGDATE the value of alert is TESTALERT

关于xquery - fn :replace to return one string on iteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com