2015-06-09 64 views
0

爲了學習XQuery的上下文中的節點我試圖在BaseX的XQuery:選擇的varaible

let $x := doc("test.xq")//h2/following-sibling return $x::h2 

運行下面的XQuery命令我認爲它應該是相當於

let $x := doc("test.xq")//h2/following-sibling::h2 return $x 

但它提供了以下錯誤,而第二個命令工作

Error: 
Stopped at D:/Program Files/BaseX/data/test.xq, 1/66: 
[XPST0003] Unexpected end of query: '::h2'. 

在一般情況下,我怎麼能選擇SOM不工作e節點(h2)在變量提供的上下文中($x := doc("test.xq")//h2/following-sibling

回答

1

這並不是如何變量的工作,我害怕。它看起來像你試圖把變量聲明爲一種「宏」,並期望其文字的定義時,變量被引用在被替換下場,但實際上XQuery的變量更像是C或Java局部變量 - 在定義表達式被評估爲給出一個值或序列,並且當您引用該變量時,您將返回該值。

所以兩者的定義和引用的表達需要在自己的權利的有效表達式。如果你想存儲在變量以下所有兄弟元素的列表,然後再篩選只是你需要像

let $x := doc("test.xq")//h2/following-sibling::* return $x[self::h2] 
+0

是的,我希望變量爲進一步的表達式發揮上下文的作用 – Ahmad

1

您不能在該部分分開表達式,請參閱following-sibling::h2作爲一個單位。你可以做以下代替:

let $x := doc("test.xq")//h2 return $x/following-sibling::h2 
+0

h2元素謝謝你,但因爲對方的回答包括,我需要$ X作爲用於進一步過濾器的上下文,但我不知道如何從它們中選擇h2。 – Ahmad

+0

不知道你想要什麼究竟,已經使用上面的'return'聲明'$ x'作爲上下文選擇'以下同胞:: h2' – har07

+0

肯定的,但如果我想上下文變量是'$ X /以下事項sibling'? '你的情況$ x'包含所有'h2'元素,但我的目標是第一個'h2'後有節點和上下文應變量 – Ahmad

相關問題