求助:用XQuery统计变量中'|'出现次数以验证序列数量
嗨,作为XQuery新手确实容易遇到这类小问题,别担心,我来帮你一步步解决!你的需求是确保用|分隔的元素数量不超过30个,其实有两种直观的实现方式,我都给你列出来:
方法一:直接统计元素数量(更直观)
既然目标是元素数量不超过30,我们可以用fn:tokenize把字符串按|拆分,然后用fn:count统计拆分后的元素个数,这样直接就能判断是否符合要求:
(: 假设你的变量是存储分隔字符串的$classValues :) let $classValues := "1111|2222|3333|4444" (: 按|拆分字符串,得到元素列表后统计数量 :) let $elementCount := count(tokenize($classValues, '\|')) (: 判断是否符合不超过30的要求 :) let $isValid := $elementCount <= 30 return if ($isValid) then "序列数量符合要求(不超过30个)" else concat("序列数量超过限制,当前有", $elementCount, "个元素")
方法二:统计分隔符|的次数
如果一定要通过统计|的次数来判断,那可以用fn:translate把所有非|的字符清空,剩下的字符串长度就是|的次数,再通过次数+1得到元素数量:
let $classValues := "1111|2222|3333|4444" (: 移除所有非|的字符,剩下的都是|,取长度就是分隔符数量 :) let $pipeCount := string-length(translate($classValues, '[^|]', '')) (: 元素数量 = 分隔符数量 + 1,判断是否<=30 :) let $isValid := $pipeCount + 1 <= 30 return if ($isValid) then "序列数量符合要求(不超过30个)" else concat("序列数量超过限制,当前有", $pipeCount + 1, "个元素")
如果你的变量带class=前缀
如果你的原始变量是类似class=1111|2222|3333|4444这样的完整字符串,那需要先提取class=后面的部分,再用上面的方法处理:
let $fullString := "class=1111|2222|3333|4444" (: 提取class=之后的分隔字符串部分 :) let $classValues := substring-after($fullString, "class=") let $elementCount := count(tokenize($classValues, '\|')) let $isValid := $elementCount <= 30 return if ($isValid) then "序列数量符合要求(不超过30个)" else concat("序列数量超过限制,当前有", $elementCount, "个元素")
这几种方法都很简单,你可以根据自己的习惯选择。如果还有其他疑问,随时问哦!
内容的提问来源于stack exchange,提问作者Neha Singh
相关产品推荐
相关产品推荐

