如何在XQuery中解析字符串参数到映射的整数?

时间:2015-08-03 15:42:25

标签: string integer mapping xquery

我需要将XQuery函数中的参数映射为整数值而不是字符串。例如:

  • 参数1的值为value1,我必须将其替换为整数1
  • Parameter2的值为value2,我必须将其替换为整数2

1 个答案:

答案 0 :(得分:2)

根据您可以使用的XQuery版本,有不同的选项。

鉴于您通常需要将valueN解析为N,只需执行substring-after($value, 'value')即可。在下文中,我假设它并不那么容易,并用字母替换12,......以防止这种“简单”的解决方案。对于任何示例,您都可以返回整数而不是字符串。

XQuery 1.0兼容

如果 - 则 - 否则链

可能很明显。

let $value := 'value1'
return
  if ($value eq 'value1')
  then 'A'
  else
    if ($value eq 'value2')
    then 'B'
    else 'default'

查找XML片段

定义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]

仅限XQuery 3.0

使用switch语句

对于一堆固定值,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)