【发布时间】:2015-04-13 16:03:47
【问题描述】:
我是 xquery 的新手,在这方面寻求您的快速帮助。非常感谢您调查我的问题。
我有一个要求,我需要用给定字符串中的实际值替换多个占位符,我尝试使用下面的 XQuery 函数来实现。
这个函数的问题是每次我得到一个单独的字符串时它都会替换所有占位符,例如for 循环的第一次执行替换了第一个占位符,第二次迭代替换了第二个占位符(但对于实际的输入字符串),我正在寻找一个解决方案,我可以将第一次迭代传递给第二次迭代的输入。
XQuery:
declare function functx:replace-place-holders-with-values (
$MainString as xs:string? ,
$MappingList as node(),
$ActualValueList as node() ) as xs:string*
{
let $MessageList:=
for $BalMapping at $counter
in $MappingList//map:GetUSSDBalanceMappingRow
let $BalanceBucket := $ActualValueList//bal:BalanceItems
/bal:BalanceItem/bal:SubBalanceList
/bal:SubBalanceItem
[bal:SubBalanceType/text() =
$BalMapping//map:BalanceParamaterFlag/text()]
return <MessageList>
{
replace($BalanceString ,
($BalMapping/map:BalanceParameter/text()),
concat(
$BalanceBucket/bal:SubBalanceValue/text(),
' ',
$BalanceBucket/bal:SubBalanceUnit/text()))
}
</MessageList>
return $MessageList/text()
};
例如
输入字符串:
Your Total Balance is #BAL#, Saving Bal #SAV_BAL#, FD Balance #FD_BAL#, for more details loging to example.com
输出显示:
Your Total Balance is 205, Saving Bal #SAV_BAL#, FD Balance #FD_BAL#, for more details loging to example.com
Your Total Balance is #BAL#, Saving Bal 105, FD Balance #FD_BAL#, for more details loging to example.com
Your Total Balance is #BAL#, Saving Bal #SAV_BAL#, FD Balance 100, for more details loging to example.com
预期结果:
Your Total Balance is 205, Saving Bal 105, FD Balance 100, for more details loging to example.com
我很乐意提供更多详细信息,如果您需要更多详细信息,请告诉我。 如果您有任何其他使用 XQuery/XSLT 实现此目的的解决方案,请随意忽略上述查询。
期待很快收到回复。
【问题讨论】:
-
欢迎来到 SO,我更改了您的代码布局以使其可读,如果您在此处发布问题,如果从一开始就这样做,将有助于快速获得答案;)
-
感谢亚伯的帮助。