Запрос XQuery с использованием двух XML-документов - PullRequest
2 голосов
/ 02 ноября 2011

Используя документы Enrollment.xml и Person.xml, я пытаюсь перечислить имена учеников, у которых есть все. Поле ID в Person указывает на поле StudentID в Enrollment. В каждом классе, в который записан человек, есть запись (не одна запись на каждого учащегося)

Я не могу понять, как написать запрос

Форма Enrollment.xml->

<Document>
  <Table>
    <StudentID>170815037</StudentID>
    <Grade>C</Grade>
  </Table>
  <Table>
    <StudentID>193847547</StudentID>
    <Grade>A</Grade>
  </Table>
</Document>

Форма Person.xml ->

<Document>
  <Table>
    <Name>Wee Fletcher</Name>
    <ID>115423723</ID>
  </Table>
</Document>

Вот то, над чем я пытаюсь работать, и я не могу заставить его работать

for $a in doc("proj3/Person.xml")/Document/Table/ID
where every $s in doc("proj3/Enrollment.xml")//Table[StudentID = $a]
          satisfies ($s/Grade = "A")
    return $a/Name;

1 Ответ

2 голосов
/ 02 ноября 2011

Есть небольшая проблема: вы устанавливаете $a на doc("proj3/Person.xml")/Document/Table/ID, а затем получаете доступ к $a/Name (который возвращает несуществующий .../Table/ID/Name).

Измените назначение в первой строке исравните в секунду (добавьте /ID здесь) и ваш код будет в порядке:

for $a in doc("proj3/Person.xml")/Document/Table
where every $s in doc("proj3/Enrollment.xml")//Table[StudentID = $a/ID]
          satisfies ($s/Grade = "A")
    return $a/Name;
...