2015-05-04 68 views
-2

我正在研究一個更大的XQuery,並且在如何獲得我需要的數據方面拉了一個空白。我正在嘗試查找一個人正在處理的項目的所有pid。XQuery簡單的格式錯誤的查詢

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<projects> 
    <project pid="p123"> 
     <leader> 
      <name>Amanda</name> 
     </leader> 
     <analyst> 
      <name>Bob</name> 
     </analyst> 
    </project> 
    <project pid="p456"> 
     <leader> 
      <name>John</name> 
     </leader> 
    </project> 
    <project pid="p789"> 
     <leader> 
      <name>David</name> 
     </leader> 
     <analyst> 
      <name>Amanda</name> 
     </analyst> 
    </project> 
</projects> 

這樣的結果,而不是在這種格式,是阿曼達要與P123,P789,鮑勃P123,約翰與P456,和大衛P789。本週我剛剛開始使用XQuery,因此我對這種語言仍然很陌生。由於

編輯: 我試圖讓形式是

<workforce> 
    <emp roles, name> 
     <project> 
      <proj>(Project ids go here)</proj> 
     </project> 
    </emp> 
<workforce> 

我可以讓它進入這個形式,但我不能得到的部分。我需要將員工與當前的項目聯繫起來。

+0

請顯示你到目前爲止的內容,並解釋你卡在哪裏。 (否則這個問題是關於這個問題的,因爲這個問題通常在這裏對此不以爲然。) – Tomalak

+0

爲了清楚起見,編輯它,我知道它並不是非常清楚。 –

+2

問題不是你沒有清楚(雖然添加所需的輸出是一件好事)。問題在於你的問題並不表明你實際上試圖自己解決這個問題,而是你正在尋找可以簡單複製和粘貼的代碼。 – Tomalak

回答

0

正如其他人已經指出的那樣,最好張貼你試過的東西,以便我們看看它並修復出了什麼問題。但是好了,一個簡單的查詢,這裏是爲您解決問題的可能性:

let $in := 
    <projects> 
     <project pid="p123"> 
     <leader> 
      <name>Amanda</name> 
     </leader> 
     <analyst> 
      <name>Bob</name> 
     </analyst> 
     </project> 
     <project pid="p456"> 
     <leader> 
      <name>John</name> 
     </leader> 
     </project> 
     <project pid="p789"> 
     <leader> 
      <name>David</name> 
     </leader> 
     <analyst> 
      <name>Amanda</name> 
     </analyst> 
     </project> 
    </projects> 
for $n in distinct-values($in/project/*/name) 
return 
    <person name="{ $n }"> { 
     for $p in $in/project[*/name = $n] 
     return 
     <project pid="{ $p/@pid }" position="{ name($p/*[name eq $n]) }"/> 
    } 
    </person> 

它並不像你描述的完全輸出,但我無法理解它。評估上述表達式產生以下結果:

<person name="Amanda"> 
    <project pid="p123" position="leader"/> 
    <project pid="p789" position="analyst"/> 
</person> 
<person name="Bob"> 
    <project pid="p123" position="analyst"/> 
</person> 
<person name="John"> 
    <project pid="p456" position="leader"/> 
</person> 
<person name="David"> 
    <project pid="p789" position="leader"/> 
</person> 

也就是說,對於每個不同的名稱,創建一個person元件,以及該名稱將出現在每個項目中,創建與它的PID一個project元件和的位置當前名稱。