按属性过滤

mrt*_*eth 2 xquery

下面是XML文件的摘录,其中包含65个讲座:

   <?xml version="1.0" encoding="iso-8859-1" ?>
   <university>
    <lecture>
        <class>English</class>
        <hours>3</hours>
        <pupils>30</pupils>
    </lecture>
    <lecture>
        <class>Math</class>
        <hours>4</hours>
        <pupils>27</pupils
    </lecture>
    <lecture>
        <class>Science</class>
        <hours>2</hours>
        <pupils>25</pupils>
    </lecture>
   </university>
Run Code Online (Sandbox Code Playgroud)

我需要一个where子句,该列表为我提供了比英语讲座更多的学生的讲座列表。但是,不是使用属性“ 30”,而是调用英语的演讲属性

例如,我想使用条件为where的子句,例如学生> English.pupils,而不是学生> 30

(“小学生> English.pupils”仅以puesdo代码为例)

wst*_*wst 5

where子句不是严格必需的,但是要使用该子句,您可以使其成为for迭代器的一部分:

let $lectures := doc("lectures.xml")/university/lecture
let $english-pupils := $lectures[class = "English"]/pupils/xs:integer(.)
for $lecture in $lectures
where ($lecture/pupils/xs:integer(.) gt $english-pupils)
return $lecture
Run Code Online (Sandbox Code Playgroud)

您也可以flwor通过使用XPath谓词来完全避免。

let $lectures := doc("lectures.xml")/university/lecture
let $english-pupils := $lectures[class = "English"]/pupils/xs:integer(.)
return $lectures[pupils/xs:integer(.) gt $english-pupils]
Run Code Online (Sandbox Code Playgroud)