简体   繁体   English

带有谓词的XQuery表达式

[英]XQuery expression with predicates

I'm trying to use an expression with a predicate to display the child nodes for each parent node (the exercise looks silly because this is test data: the final solution has to draw in data from other xml files). 我正在尝试使用带有谓词的表达式来显示每个父节点的子节点(该练习看起来很愚蠢,因为这是测试数据:最终的解决方案必须从其他xml文件中提取数据)。

A sample of the data is as follows: 数据样本如下:

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

The query is below: 查询如下:

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

The error appears says "node expected, array found" in relation to line 8. I've tried both a for loop, and simply placing an expression inside the academic year tags as follows 出现错误,显示与第8行有关的“期望的节点,找到了数组”。我尝试了一个for循环,并简单地将一个表达式放在学年标记内,如下所示

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

Sorry - I'm sure it is simple. 抱歉-我敢肯定这很简单。 I'm a beginner! 我是初学者!

There is no child node preceding the predicate. 谓词之前没有子节点。

When selecting the School elements, move it outside of the predicate as the child node selected from the Schools element, and then inside the predicate filter, refer to the current School element with . 选择School元素时,将其移动到谓词外部作为从Schools元素中选择的子节点,然后在谓词过滤器内部,使用引用当前的School元素. :

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

But if you are iterating over the elements from the same document, why not just use the already selected $School : 但是,如果要遍历同一文档中的元素,为什么不只使用已经选择的$School

for $i in $School/AcademicYear

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM