Xml 使用xquery转换全宽数字

Xml 使用xquery转换全宽数字,xml,unicode,xquery,Xml,Unicode,Xquery,My$inputXML包含全宽阿拉伯数字,作为cjk文本较大部分的一部分。每当我尝试做与数字相关的事情时,我都会得到NaN错误 有没有把这些数字转换成数字的方便方法 xquery version "3.0"; 1 + 1 我试过号码(1)和规范化unicode(1, '')但运气不好。首先,请注意我在您的示例代码中看到的一些问题,我认为这些问题只是复制/粘贴问题,但值得一提,以防万一:(1)函数是normalize unicode,而不是unicode normalize,(2)它需要字符串(

My
$input
XML包含全宽阿拉伯数字,作为cjk文本较大部分的一部分。每当我尝试做与数字相关的事情时,我都会得到
NaN
错误

有没有把这些数字转换成数字的方便方法

xquery version "3.0";
1 + 1

我试过
号码(1)
规范化unicode(1, '')但运气不好。

首先,请注意我在您的示例代码中看到的一些问题,我认为这些问题只是复制/粘贴问题,但值得一提,以防万一:(1)函数是
normalize unicode
,而不是
unicode normalize
,(2)它需要字符串(因此需要在参数周围加引号,例如,
)1'),和(3)第二个参数必须与已知的规范化形式之一匹配:
NFD、NFC、NFKD、NFKC

这里有一个适合我的解决方案:使用NFKC(兼容性分解)表单:

返回预期结果:

1

有关更多信息,请参阅。

Java似乎有,因此您可以从XQuery调用Java。谢谢@MartinHonnen,我无法让Java调用正常工作,但我现在就开始执行。
translate($n/string(),codepoints to string((652966529765298265299653065301 653026530365304 65305)),“0123456789”)
看起来不错,我想你可以将
代码点缩短为字符串((652966529865299653065301 653026530365304 65305))
缩短为
代码点到字符串(65296到65306)
。很抱歉@joewiz在操作中的输入错误,我编辑了这篇文章。根据Xquery第二版
标准化unicode('xxxx','')
应该选择默认的标准化。我通过exist2.2运行了您的示例,但在尝试执行添加时仍然得到了
NaN
。我将进一步使用它,明天在这里发表评论。至于XQuery第二版(来自O'Reilly的Walmsley标题),我在看第563页,其中说,当提供零长度字符串作为第二个参数时,“不执行任何规范化”。至于eXist对该函数的覆盖范围,去年6月底eXist中有一个对unicode标准化的修复(请参阅)它本应包含在2015年7月初的eXist 3.0RC1版本中,但在我的测试(在我的示例代码中引用)的2.2..中没有出现我正在使用eXist开发分支的一个相当新的版本。你能更新到3.0RC1吗?是的,这就是我正在查看的页面。默认的规范化是为整个集合设置的。总之:
1+number(规范化unicode('s))1', 'NFKC'))
在exists2.2中返回
NaN
,但使用Saxon工作。
1+number(translate('1', 代码点到字符串((65297)),“1”))
返回
2
为了我自己的理智,升级到RC现在不是一个选项。我会加入GH票。了解RC。Re:Walmsley,你是指第563页上的这个短语吗?
如果没有提供$normalizationForm,NFC将用作默认值。
如果是,那么Walmsley指的是单个参数此函数的第三个版本,而不是第二个参数的空字符串。换句话说:
规范化unicode('1')
将导致NFC规范化,但
规范化unicode('1', '')将保持未规范化状态。
1