带谓词的 XQuery 表达式

XQuery expression with predicates

我正在尝试使用带有谓词的表达式来显示每个父节点的子节点(这个练习看起来很傻,因为这是测试数据:最终解决方案必须从其他 xml 文件)。

数据样本如下:

<Schools>
<School>
<name>St John's</name>
<AcademicYear year = "2017"></AcademicYear>
<Subject>English</Subject>
<Subject>Geography</Subject>
<Subject>Maths</Subject>
<AcademicYear year = "2016"></AcademicYear>
<Subject>Maths</Subject>
<Subject>Textiles</Subject>
<Subject>English</Subject>
<AcademicYear year = "2015"></AcademicYear>
<Subject>History</Subject>
<Subject>French</Subject>
<Subject>Spanish</Subject>
</School>

<School>
<name>Marsh Academy</name>
<AcademicYear year = "2017"></AcademicYear>
<Subject>Science</Subject>
<Subject>Geography</Subject>
<Subject>Computer science</Subject>
<AcademicYear year = "2016"></AcademicYear>
<Subject>English</Subject>
<Subject>History</Subject>
<Subject>Maths</Subject>
<AcademicYear year = "2015"></AcademicYear>
<Subject>French</Subject>
<Subject>Geography</Subject>
<Subject>Art</Subject>
</School>

</Schools>

查询如下:

<Schools>
{for $School in doc("test.xml")/Schools/School
return
<School>
  <Name>
  {$School/name}
  </Name>
  {for $i in doc("test.xml")/Schools/[School = $School]/AcademicYear
  return
  <AcademicYear>
    {$i/@year}
    <subject><teacher></teacher><scale></scale></subject>
  </AcademicYear>}
   </School>}
</Schools>

出现的错误是关于第 8 行的 "node expected, array found"。我已经尝试了一个 for 循环,并简单地在学年标签中放置一个表达式,如下所示

{doc("test.xml")/Schools/[School = $School]/AcademicYear/@year}

抱歉 - 我相信这很简单。我是初学者!

谓词前面没有子节点。

选择School元素时,将其移动到predicate之外,作为从Schools元素中选择的子节点,然后在predicate过滤器内部,引用当前的School 元素 .:

for $i in doc("test.xml")/Schools/School[. = $School]/AcademicYear

但是如果您要遍历同一文档中的元素,为什么不直接使用已经选择的 $School:

for $i in $School/AcademicYear