2017-12-01 1 views
1

각 상위 노드에 대한 하위 노드를 표시하기 위해 술어와 함께 표현식을 사용하려고합니다. (연습 문제는 테스트 데이터이기 때문에 어리석은 것처럼 보입니다. 최종 해결책은 다른 XML 파일의 데이터를 그려야합니다.). 다음술어를 사용하는 XQuery 표현

데이터의 예입니다

<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. I 라인과 관련하여 "노드 예상 배열 발견"라는 for 루프를 시도하고 다음과 같이 학년 태그 안에 표현식을 넣으십시오.

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

죄송합니다. 간단합니다. 나는 초보자이다!

답변

0

술어를 선행하는 하위 노드가 없습니다.

School 요소를 선택할 때, Schools 소자로부터 선택된 자식 노드와 술어의 외측으로 이동하고 술어 필터 내부 .와 현재 School 요소 참조 :

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

하지만 같은 문서의 요소를 반복하는 경우, 왜 그냥 이미 $School를 선택 사용하지 :

for $i in $School/AcademicYear 
+0

많은 감사를 - 그게 정말 도움이됩니다. 내가 표현한 컨텍스트 아이템의 역할을 이해하지 못했습니다. 나는 지금 그것을 보았다! 고맙습니다. – FullTiltBoogie