XQuery получает данные на основе различных значений - PullRequest
0 голосов
/ 04 декабря 2018

Мой 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 ]

0 голосов
/ 04 декабря 2018

В XQuery 3.1 вы можете сделать это с group .

for $course := doc("reed.xml")/root/course
group by $title := $course/title
return ( <title>{$title}</title> , 
         <instructors>{$course/instructor}</instructors> )
0 голосов
/ 04 декабря 2018

В коде, который вы опубликовали, цикл 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)})
...