Mar*_*nen 2 xslt-3.0 xpath-3.1 xquery-3.1
https://www.w3.org/TR/xpath-functions/#func-tokenize说明有关的单参数版本tokenize:
此函数的单参数形式在空白边界处分割提供的字符串。
然后继续定义或解释
调用
fn:tokenize($input)等效于fn:tokenize(fn:normalize-space($input), ' '))在第二个参数是单个空格字符(x20)的情况下调用
但是,当我尝试count(tokenize('1 2 3')), count(tokenize('1 2 3'))使用Saxon或BaseX或XmlPrime时,我得到3 3了count(tokenize('1 2 3', ' ')), count(tokenize('1 2 3', ' '))所有这三种实现中的等效功能3 1。
因此,这三个实现似乎都与tokenize($s)文字说明所说的一致(“将提供的字符串在空格边界处分割”),但是,如果在字面上传递了一个空格,那么似乎并没有满足规范中给定的fn:tokenize($input)和fn:tokenize(fn:normalize-space($input), ' '))仅将单个空格用作分隔符,而不是空白边界。
规范中作为单参数版本的定义给出的等效性是否错误?
调用normalize-space()会将换行符替换为x20空格字符。所以,当count(tokenize('1 2 3', ' '))给1时,count(tokenize(normalize-space('1 2 3'), ' '))给3。
换行符和制表符可以用一个更聪明的正则表达式来代替,但是调用的关键normalize-space()是修剪前导和尾随空格。例如tokenize(" red green blue ", "\s+")给出5个令牌,但tokenize(" red green blue ")给出3个。
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |