2013-11-28 48 views
0

我剛剛由一個示例中定義一個層次來說明什麼,我會問你:參考內的可變

=>它是確定創建一個變量,數據放在它,操縱這個變量的返回與我操作路徑的方式相同?

下面這段代碼,

let $variable :=(for $pou in blabla/blabla 
    return (element thing {attribute status {data($pou/name)}, 
    let $thing2 := for $z in $pou/bacon[@status="c"] 
     return element thing3 {data($z/code)} return($thing2) })) return() 

會做類似

<thing> 
<thing2><thing3></thing3> 
</thing2> 
</thing> 

是OK鍵進入先前與 「$變量/ thing2」 創建存在於結構的標籤? ?

let $variable :=(for $pou in adress/blablalba/adresse/blabla/blabla 
    return (element thing {attribute status {data($pou/name)}, 
    let $thing2 := for $z in $pou/bacon[@status="c"] 
     return element thing3 {data($z/code)} return($thing2) })) return($variable/thing2) 

在我的實際項目中,我創建了正確顯示當我啓動它的多個變量,但是當我試圖訪問/指他們不工作,我開始相信比你不能訪問什麼只是做在一個變量裏面以同樣的方式?但我有點卡住了!

我希望你明白我的問題,因爲我承認這是非常糟糕的解釋

乾杯

+1

最後,你正在處理同樣的問題,如[關於實現計數的這個問題](http://stackoverflow.com/questions/10294677/updating-counter-in-xquery/10295046#10295046)。 XQuery中的變量是不可變的。最高票數的答案並沒有詳細解釋問題(但爲這個特定問題發佈了一個解決方案),[我的主要描述了這個問題](http://stackoverflow.com/a/10295046/695343)。如果您想解決您的特定問題需要幫助,請務必解釋您想要執行的操作_並添加一些數據_。閱讀如何發佈[SSCCE](http://www.sscce.org)。 –

回答

1

是的,你可以做你想做的。你得到的錯誤不是因爲你想做的事是不可能的,而是因爲你的路徑表達不正確。

爲了說明XPath表達式可以成功導航內部變量,其值在查詢構造,考慮以下查詢:

let $variable := <a><b>10</b><b>20</b><b>30</b></a> 
return $variable/b[number(.) lt 25] 

這將返回a元件,其是的兒童中的前兩個b元件值爲$variable

在您的示例中,您將$variable綁定爲一個thing元素的序列,其中每個元素都包含一個thing3元素的序列。然後,您嘗試檢索不可能存在的thing2元素(查詢中字符串thing2的唯一出現位置是變量的名稱)。

+0

謝謝你的回答, 如何只選擇當前節點?我試過self :: node() ,比如:$ variable/self :: node(),但是我已經把所有的東西都帶給了孩子們!我如何只選擇節點 ?? – Rsmusic

+0

你沒有(在我的小例子中)一個形式爲''的節點 - 你有一個帶孩子的'a'元素。沒有「」這個形式的節點供您選擇;如果你想要一個,你需要構建一個。 –

+0

如何參考第二個標籤「b」或第三個標籤「b」?我卡住了 – Rsmusic