xquery根据某些条件跳过xml记录

xquery根据某些条件跳过xml记录,xquery,Xquery,我希望XQuery代码按订单号分组,如果整个组的任何状态为打开状态,则跳过XML记录(完整组) 代码: for $x in doc("C:/Users/XML/SFO1.xml")//records let $a :=$x/Order_Number__c let $b :=$x/Interface_Status__c let $Order_Number__c := (substring($a,6,8)) order by $Order_Number__c,$b ascending ret

我希望XQuery代码按订单号分组,如果整个组的任何状态为打开状态,则跳过XML记录(完整组)

代码:

for $x in doc("C:/Users/XML/SFO1.xml")//records

let $a :=$x/Order_Number__c

let $b :=$x/Interface_Status__c

let $Order_Number__c := (substring($a,6,8))

order by $Order_Number__c,$b ascending
return $x
伪代码:

order   status
------- --------- 
123     submitted
123     processed
345     open
345     submitted
345     processed
432     processed
432     submitted
在上面,我只需要下面的记录就可以输出了

order   status
------   ---------
123     submitted
123     processed
432     processed
432     submitted

假设您有XQuery 3
分组依据
支持:

for $x in doc("C:/Users/XML/SFO1.xml")//records
group by $no := $x/Order_Number__c
where not(($x/Interface_Status__c = 'Open'))
let $Order_Number__c := (substring($no,6,8))
order by $Order_Number__c
return
  for $r in $x
  order by $r/Interface_Status__c
  return $r
这应该像在
group by
子句之后一样工作,变量
$x
绑定到整个组,因此
在不($x/Interface_Status_uc='open'))的地方(
应该检查您的条件“是否有任何状态为整个组打开”否定,以便以下返回仅输出没有任何此类记录且处于打开状态的组,即,不返回或分别跳过任何此类组


使用输入样本在处或为表格输出在处编码。

那么您面临的错误是什么?您可以将伪数据粘贴到xml格式吗?打开SADJ-00035267已提交SADJ-00035267已提交SADJ-00013268已处理SADJ-00013268这看起来不像上面的伪代码;它包含更多的项目和其他订单号。另外,您应该在问题本身中添加xml,而不是在注释中。我正在使用stylus studio测试上述代码,但出现了一个错误。就像我正在使用stylus studio测试上述代码,但出现了一个错误,如预期的“返回”,但遇到了“组”,我尝试了以下代码:doc中的$x(“C:/Users/Administrator/Desktop/xml/SFO.xml”)//记录let$no:=$x/Order\u Number\uu c/text()let$Order\u Number\uu c:=(子字符串($no,1,13)),其中不($x/Interface\u Status\uu c/text()='Open'))Order by$Order\u Number\uu c返回$r,Order by$r/Interface\u Status\uu c返回$r@HariTeja,正如您现在展示的一些输入示例一样,我已经测试了代码,我不得不将比较改为使用
Open
,而不是
Open
。除此之外,正如您在或上看到的那样,代码是有效的。它需要XQuery 3支持,因为在这里引入了
GROUPBY
子句。我不知道哪个版本的Stylus Studio支持哪个XQuery处理器,但有一些开源的,比如Saxon 9 HE、BaseX或eXist db,它们都支持XQuery 3。