我需要将XQuery函数中的参数映射为整数值而不是字符串。例如:
value1
,我必须将其替换为整数1
value2
,我必须将其替换为整数2
答案 0 :(得分:2)
根据您可以使用的XQuery版本,有不同的选项。
鉴于您通常需要将valueN
解析为N
,只需执行substring-after($value, 'value')
即可。在下文中,我假设它并不那么容易,并用字母替换1
,2
,......以防止这种“简单”的解决方案。对于任何示例,您都可以返回整数而不是字符串。
可能很明显。
let $value := 'value1'
return
if ($value eq 'value1')
then 'A'
else
if ($value eq 'value2')
then 'B'
else 'default'
定义XML结构,随后查询该值。如有必要,请添加/string()
以获取节点的字符串值,而不是<value/>
元素。
let $map :=
<values>
<value id="value1">A</value>
<value id="value2">B</value>
</values>
let $value := 'value1'
return
$map/value[@id=$value]
类似的解决方案可以应用于序列而不是外部<values/>
元素,当然:
let $map := (
<value id="value1">A</value>,
<value id="value2">B</value>
)
let $value := 'value1'
return
$map[@id=$value]
对于一堆固定值,switch语句是一种非常优雅的方式。提取函数可能会提高可读性。
let $value := 'value1'
return
switch ($value)
case 'value1' return 'A'
case 'value2' return 'B'
default return 'default'
如果支持,XQuery地图是一个非常强大的功能,也可以用来查找值。
let $map := map {
'value1': 'A',
'value2': 'B'
}
let $value := 'value1'
return
$map($value)