xquery根据某些条件跳过xml记录
我希望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
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。