XQuery 表达式根据属性比较返回项目

XQuery expression to reutrn items based on comparison on their attributes

假设 XML 是

<s>
  <e id="2" role="x">
  <e id="3" role="y">
</s>
<s>
  <e id="2" role="y">
  <e id="3" role="x">
</s>

我正在寻找 return 所有 s 的 XQuery,其中它们具有元素 e[@role="x"] 和元素 e[@role="y"] 作为任何后代和第一个元素 id小于第二个元素id.

例如在上面的例子中,它应该只有 return 第一个 s

只要每个角色不超过一个,这就有效:

let $d := (
<s>
  <e id="2" role="x"/>
  <e id="3" role="y"/>
</s>,
<s>
  <e id="2" role="y"/>
  <e id="3" role="x"/>
</s>
)
return (
  $d/descendant-or-self::s[.//e[@role="x"] and .//e[@role="y"] and
     .//e[@role="x"]/xs:integer(@id) < .//e[@role="y"]/xs:integer(@id)]
)