Xquery 按属性筛选

Xquery 按属性筛选,xquery,Xquery,下面是一个XML文件的摘录,其中包含65个讲座: <?xml version="1.0" encoding="iso-8859-1" ?> <university> <lecture> <class>English</class> <hours>3</hours> <pupils>30</pupils> </

下面是一个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>

英语
3.
30
数学
4.

27A
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]

谢谢,我目前正在使用for循环,所以没关系。我看到你在let中宣布了英国学生,以及一般讲座。然而,在where条款中,gt是否表示“结束”?那么,第4行是不是意味着“学生>英语.学生”?
gt
只是意味着“大于”。如果您要比较序列,请使用
。好的,谢谢您提供的信息。这两种代码都有效。感谢您的帮助。序列是XQuery处理多个项的方式,与其他具有数组的语言不同。如果比较的任一侧是序列,那么您将使用
而不是
gt