2016-04-23 10 views
2

Unten ist ein Auszug aus einer XML-Datei mit 65 Vorträgen:Filterung nach Attribute

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

Ich brauche eine where-Klausel, die mir eine Liste von Vorträgen mit mehr Schülern als ein englischen Vortrag gibt. Allerdings nicht mit dem Attribut „30“ verwendet, aber Vortrag des englischen Attribut statt

Beispiel nennen, möchte ich mit einer Bedingung wie Schüler> English.pupils, statt Schüler> 30 eine where-Klausel verwenden, .

(Die "Schüler> English.pupils" ist nur Code als Beispiel puesdo)

Antwort

4

A where Klausel ist nicht unbedingt notwendig, aber man verwenden Sie wäre es Teil eines for Iterator machen:

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 

Sie könnten auch die flwor insgesamt vermeiden, indem Sie ein XPath-Prädikat verwenden.

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

danke, ich benutze derzeit eine for-Schleife, so dass es in Ordnung ist. Ich sehe, dass Sie die englischen Schüler im Lettisch erklärt haben, sowie die allgemeinen Vorlesungen. In der where-Klausel bedeutet das gt "over"? Bedeutet Zeile 4 also "_pupils> English.pupils_"? – mrteeth

+0

'gt' bedeutet einfach" größer als ". Wenn Sie Sequenzen vergleichen, würden Sie '>' verwenden. – wst

+0

Okay, danke für die Info. Beide Code funktioniert. Danke für die Hilfe. – mrteeth