首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tokenize($s)是否与tokenize($s,‘')相同?

tokenize($s)是否与tokenize($s,‘')相同?
EN

Stack Overflow用户
提问于 2018-09-18 08:12:45
回答 1查看 62关注 0票数 2

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), ' '))的等价性似乎不成立,如果一个空格确实被传入,那么只使用单个空格作为分隔符,而不是空白边界。

规范中给出的作为单个参数版本定义的等价性是否错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 17:39:08

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。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52381913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档