XQuery 根据不同的值获取数据
XQuery get data based on distinct values
我的xml是这样的:
在 inputxml
满 xml
<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>
我需要对课程和 return 教授这些课程的讲师采取不同的价值观。
这是我当前的代码:
let $x := doc("reed.xml")/root/course
for $y in distinct-values($x/title)
let $z := $y/instructor
return ( {data($y)} ,{data($z)})
我做错了什么
在您发布的代码中,for 循环遍历不同的 title
字符串值序列。
您不能对这些字符串进行 XPath。
相反,您希望在 $x
课程中使用 XPath,并在每次迭代中使用 $y
来 select 具有 [=11= 的那些 course
元素]等于$y
,那么select就是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 中,您可以使用 group by 来做到这一点。
for $course := doc("reed.xml")/root/course
group by $title := $course/title
return ( <title>{$title}</title> ,
<instructors>{$course/instructor}</instructors> )
我的xml是这样的: 在 inputxml
满 xml<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>
我需要对课程和 return 教授这些课程的讲师采取不同的价值观。
这是我当前的代码:
let $x := doc("reed.xml")/root/course
for $y in distinct-values($x/title)
let $z := $y/instructor
return ( {data($y)} ,{data($z)})
我做错了什么
在您发布的代码中,for 循环遍历不同的 title
字符串值序列。
您不能对这些字符串进行 XPath。
相反,您希望在 $x
课程中使用 XPath,并在每次迭代中使用 $y
来 select 具有 [=11= 的那些 course
元素]等于$y
,那么select就是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 中,您可以使用 group by 来做到这一点。
for $course := doc("reed.xml")/root/course
group by $title := $course/title
return ( <title>{$title}</title> ,
<instructors>{$course/instructor}</instructors> )