按属性过滤

时间:2016-04-23 22:56:51

标签: xquery

以下是包含65个讲座的XML文件的摘录:

   <?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>

我需要一个where子句,它给出了一个比英语讲座更多学生的讲座清单。但是,不是属性&#34; 30&#34;使用,但改为调用英语的讲座属性

例如,我想使用where子句,其条件如 pupils&gt; English.pupils ,而不是学生&gt; 30 即可。

(&#34;学生&gt; English.pupils&#34;仅以puesdo代码为例)

1 个答案:

答案 0 :(得分: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

您还可以通过使用XPath谓词完全避免flwor

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