You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XQuery量词表达式匹配序列:Mondial XML数据库内陆省份查询

解决Mondial数据库中查找内陆省份的XQuery问题

我太懂你这种被XQuery里的字符串匹配坑到的感觉了!你原来的思路没问题——找所有不临海的省份,但问题出在$sea/located/@province是空格分隔的多个省份ID字符串,不是单个值,直接用!=根本没法正确判断当前省份是否在临海列表里。

给你两个靠谱的解决方案:

方法1:用tokenize()拆分字符串(推荐)

把空格分隔的ID字符串拆成单个ID的序列,再判断当前省份ID是否不在任何一个临海序列里:

let $inland := //province/@id
where every $sea in //sea satisfies not($inland = tokenize($sea/located/@province, '\s+'))
return $inland
  • tokenize($sea/located/@province, '\s+'):用正则表达式\s+(匹配任意数量的空格)把长字符串拆成独立的省份ID序列
  • not($inland = ...):检查当前省份ID不在这个临海省份序列里,所有海域都满足这个条件的话,就是内陆省份

方法2:用contains()加边界避免部分匹配

如果你的环境对tokenize()支持有限,可以用这种方法,通过给字符串前后加空格来避免部分ID匹配(比如把"123"误判为包含在"1234"里):

let $inland := //province/@id
where every $sea in //sea satisfies not(contains(concat(' ', $sea/located/@province, ' '), concat(' ', $inland, ' ')))
return $inland
  • concat(' ', ..., ' '):给原始ID字符串和当前省份ID前后都加空格,确保匹配的是完整的ID
  • contains(...):判断带空格的ID是否存在于带空格的临海列表中,前面加not()就表示不存在

两种方法都能解决你的问题,优先选第一种,代码更清晰易读!

内容的提问来源于stack exchange,提问作者TheForgot3n1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:07:02