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

如何用XQuery检测bracketSequenceNumber重复值并抛出异常

用XQuery检测重复的bracketSequenceNumber并抛出异常

需求说明

当XML中存在多个bracketQualifier节点,且其中的bracketSequenceNumber子元素值重复时,需要抛出异常。元素数量不固定,可多于3个。

正确实现代码

以下是可直接使用的XQuery代码,包含示例XML和重复检测逻辑:

let $input-xml := document {
  <root>
    <bracketQualifier>
       <bracketSequenceNumber>1</bracketSequenceNumber>
    </bracketQualifier>
    <bracketQualifier>
       <bracketSequenceNumber>1</bracketSequenceNumber>
    </bracketQualifier>
    <bracketQualifier>
       <bracketSequenceNumber>2</bracketSequenceNumber>
    </bracketQualifier>
  </root>
}

-- 收集所有序列编号值
let $sequence-values := $input-xml/bracketQualifier/bracketSequenceNumber/text()
-- 筛选出重复出现的编号
let $duplicate-numbers := distinct-values($sequence-values)[count($sequence-values[. = current()]) > 1]

return
  if (exists($duplicate-numbers)) then
    -- 抛出自定义异常,包含重复编号信息
    error(xs:QName("DuplicateSequenceError"), concat("发现重复的序列编号:", string-join($duplicate-numbers, ", ")))
  else
    "所有序列编号均唯一"

代码说明

  1. 收集序列值:$sequence-values提取所有bracketSequenceNumber的文本内容,便于后续统计。
  2. 检测重复:通过distinct-values去重后,筛选出出现次数超过1次的编号,存入$duplicate-numbers。
  3. 异常抛出:如果存在重复值,调用error()函数抛出带自定义错误名称和详细信息的异常;无重复则返回验证通过提示。

结合额外条件的扩展实现

如果需要结合$GDSN_PriceSyncPriceSegmentTM/value = '250'的条件触发检测,可修改代码如下:

let $input-xml := document { /* 替换为你的实际XML数据源 */ }
let $trigger-condition := $input-xml/GDSN_PriceSyncPriceSegmentTM/value = '250'
let $sequence-values := $input-xml/bracketQualifier/bracketSequenceNumber/text()
let $duplicate-numbers := distinct-values($sequence-values)[count($sequence-values[. = current()]) > 1]

return
  if ($trigger-condition and exists($duplicate-numbers)) then
    error(xs:QName("DuplicateSequenceError"), concat("当value为250时,发现重复序列编号:", string-join($duplicate-numbers, ", ")))
  else
    "验证通过"

原代码问题分析

你之前的代码未成功实现需求,主要问题有两点:

  1. 选择器错误:使用了属性选择器@bracketSequenceNumber,但目标值是子元素而非属性,应改为子元素路径bracketSequenceNumber。
  2. 上下文与逻辑错误:循环中统计重复时未指定正确的上下文节点,且判断条件$count >=1逻辑错误,应判断是否存在出现次数>1的编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:25:26