XQuery调用codepoints-to-string时codepoints转integer报错咨询
错误原因
- 你调用
fn:replace替换空格后得到的仍然是单个字符串,并非可直接传入codepoints-to-string的整数序列 - 直接对包含逗号、空格的字符串执行
xs:integer转换,会因为存在非数字字符触发类型转换报错,也就是你收到的FORG0001错误
解决方法
你需要先将空格分隔的编码字符串按空格分割为单个数字字符串,再逐个转换为整数,即可得到xs:integer*类型的序列:
declare function local:decodeBase64() as element(){ <root-element> { let $codepointsString := "77 97 110" (: 按空格分割字符串得到单个数字的字符串序列 :) let $codepointStrSeq := fn:tokenize($codepointsString, '\s+') (: 逐个转换为整数,得到xs:integer*序列 :) let $codepointIntSeq := $codepointStrSeq ! xs:integer(.) let $x := fn:codepoints-to-string($codepointIntSeq) return $x } </root-element> };
如果你的XQuery环境不支持!映射运算符,可以替换为for循环遍历转换:
let $codepointIntSeq := for $s in $codepointStrSeq return xs:integer($s)
如果是从XML元素中获取codepoint值,处理逻辑完全一致,比如你有如下结构的元素:
<codepoint-list>77 97 110</codepoint-list>
只需要先取元素的文本内容再执行上述处理即可:
let $codepointsString := $your-element/text() (: 后续分割、转换逻辑和上面完全相同 :)
内容的提问来源于stack exchange,提问作者user16728667
相关产品推荐
相关产品推荐

