fn:replace 到 return 迭代一个字符串
fn:replace to return one string on iteration
我希望通过使用映射的键值对来实现对文档中字符串的查找和替换。由于 2 个映射值,我目前拥有的代码似乎是 returning 2 个字符串。
我正在寻找 return 一个用花括号中的值替换为映射中的值的字符串。
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
我希望通过使用映射的键值对来实现对文档中字符串的查找和替换。由于 2 个映射值,我目前拥有的代码似乎是 returning 2 个字符串。 我正在寻找 return 一个用花括号中的值替换为映射中的值的字符串。
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