Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Xquery中的十六进制到Ascii转换_Xml_Xslt_Xquery - Fatal编程技术网

Xml Xquery中的十六进制到Ascii转换

Xml Xquery中的十六进制到Ascii转换,xml,xslt,xquery,Xml,Xslt,Xquery,我需要使用xquery将十六进制字符串转换为ASCII,请提供相应的参考或代码片段以实现此功能 谢谢你的帮助 如果要解码十六进制编码的字符串,可以使用和来解构/重建字符串: declare function local:hex-digit($digit as xs:integer) as xs:integer { (: range '0'..'9' :) if(48 le $digit and $digit lt 58) then $digit - 48 (: range 'a'..

我需要使用xquery将十六进制字符串转换为ASCII,请提供相应的参考或代码片段以实现此功能


谢谢你的帮助

如果要解码十六进制编码的字符串,可以使用和来解构/重建字符串:

declare function local:hex-digit($digit as xs:integer) as xs:integer {
  (: range '0'..'9' :)
  if(48 le $digit and $digit lt 58) then $digit - 48
  (: range 'a'..'f' :)
  else if(97 le $digit and $digit lt 103) then $digit - 87
  (: everything else :)
  else fn:error((), 'Illegal character: ' || $digit)
};

declare function local:hex-to-string($hex as xs:string) as xs:string {
  let $n := fn:string-length($hex)
  let $digits := fn:string-to-codepoints(lower-case($hex))
  return fn:codepoints-to-string(
    for $pos in 1 to $n idiv 2
    let $hi := $digits[2 * $pos - 1],
        $lo := $digits[2 * $pos]
    return 16 * local:hex-digit($hi) + local:hex-digit($lo)
  )
};

然后
local:hex-to-string(“68656C6F20776F726C6421”)
返回字符串
“hello-world!”

不是所有的十六进制符号都是ASCII字母吗?您希望在十六进制和ASCII之间建立什么样的映射?请尝试更好的映射。什么是“十六进制字符串”?最简单的方法是将其转换为
xs:hexBinary
,并将二进制读取为字符串,但并非所有xquery处理器都可以执行第二步