2016-04-23 279 views
2

下面是從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> 

我需要一個where子句,讓我比英語演講更多的學生講課的列表。但是,不與屬性「30」使用,但在調用英文的演講屬性,而不是

例如,我想要使用像學生的條件> English.pupils where子句,而不是學生> 30

(其中「小學生> English.pupils」只是puesdo代碼爲例)

回答

4

一個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] 
+0

謝謝,我目前正在使用for循環,所以沒關係。我看到你宣佈了英語學生,以及一般的講座。但是,在where子句中,gt是否意味着「over」?那麼,第4行是否意味着「_pupils> English.pupils_」? – mrteeth

+0

'gt'只是意味着「大於」。如果你正在比較序列,你可以使用'>'。 – wst

+0

好的,謝謝你的信息。兩個代碼都可以。謝謝您的幫助。 – mrteeth