XQuery получает данные на основе различных значений
Мой xml такой: полный xml на inputxml
<course>
<reg_num>10616</reg_num>
<subj>BIOL</subj>
<crse>361</crse>
<sect>F</sect>
<title>Genetics and MolecularBiology</title>
<units>1.0</units>
<instructor>Russell</instructor>
<days>M-W-F</days>
<time>
<start_time>11:00AM</start_time>
<end_time>11:50</end_time>
</time>
<place>
<building>PSYCH</building>
<room>105</room>
</place>
</course>
Мне нужно принимать разные значения для курсов и возвращать инструкторов, которые преподают эти курсы.
Это мой текущий код:
let $x := doc("reed.xml")/root/course
for $y in distinct-values($x/title)
let $z := $y/instructor
return ( {data($y)} ,{data($z)})
Что я делаю неправильно
2 ответа
Решение
В опубликованном вами коде цикл for выполняет итерацию по последовательности title
строковые значения.
Вы не можете XPath в эти строки.
Скорее, вы хотите XPath в $x
курсы и использовать $y
в каждой итерации, чтобы выбрать те course
элементы, которые имеют title
равно $y
, затем выберите это instructor
,
let $x := doc("reed.xml")/root/course
for $y in distinct-values($x/title)
let $z := $x[title = $y]/instructor
return ( {data($y)} ,{data($z)})
В XQuery 3.1 вы можете сделать это с помощью группы.
for $course := doc("reed.xml")/root/course
group by $title := $course/title
return ( <title>{$title}</title> ,
<instructors>{$course/instructor}</instructors> )