2012-01-26 14 views
2

私は3つの異なるXMLファイルのデータを1つの統一フォーマット にマージするためのXQueryベースのSQLスクリプトを書くことになっています。 出力は次のような形式である必要があります:XQuery - 助けが必要

<Courses> 
<Course school="NYU"> 
<Number>30144</Number> 
<Title>C‐PAC II</Title> 
<Instructor>Lewis</Instructor> 
</Course> 
... 
<Course school="Harvard"> 
<Number>4949</Number> 
<Title>Computer Science 50. Introduction to Computer Science I</Title> 
<Instructor>Michael D. Smith</Instructor> 
</Course> 
... 
</Courses> 

私は上記を達成するために、次のスクリプトを書いた:私が間違っていたた場所

SELECT catalog.query(' 
<Courses> 
{ 
(<Course school = "NYU"> 
{ 
for $x in (/nyu/Course) 
return 
<Number> {$x/CallNo/text()} </Number> 
<Title> {$x/Name/text()} </Title> 
<Instructor> {$x/Instructor/text()} </Instructor> 
} 
</Course>) 

union  

(<Course school = "Harvard"> 
{ 
for $y in (/harvard/Course) 
return 
<Number> {$y/Number/text()} </Number> 
<Title> {$y/Title/text()} </Title> 
<Instructor> {$y/Instructor/text()} </Instructor> 
}    
</Course>) 

union 

(<Course scool = "Umich"> 
{ 
for $z in (/umich/Course) 
return 
<Number> {$z/@catalognumber} </Number> 
<Title> {$z/name/text()} </Title> 
} 
</Course>) 
}      
</Courses> 
')  
from catalogs 

は、誰も私に教えていただけますか?

答えて

1

XQuery operatorsはファイルではなくノードのシーケンスで動作します。

document("umich.xml")/umich/Course UNION document("harvard.xml")/harvard/Course UNION document("nyu.xml")/nyu/Course 

結果セットを作成するには、ファイルからノードを返すようにdocument functionを使用し、union operator:構文はこのようなものになるだろう。