2008-09-17 25 views

cevap

3

XQuery, öğeler dışındaki herhangi bir şeyi açmak için bir işlevi yoktur.

Yapacağınız ilk şey dizginizi bir öğeye dönüştürmektir. ,

return typeswitch($room) 
    case element(bathroom) return "loo" 
    case element(kitchen) return "scullery" 
    default return "just a room" 

unutmayın bu bir MarkLogic tek çözüm olabilir:

let $str := "kitchen" let $room := element {$str} {} 

Sonra sadece normal bir anahtar yapmaya typeswitch kullanın.

if ($room eq "bathroom") then "loo" 
else if ($room eq "kitchen") then "scullery" 
else "just a room" 

bir typeswitch kullanarak gerçekten ne yaptığını saklandığını:

+1

Bu çözüm (should) Herhangi xquery işlemcide çalışır ancak çözüm eğer basit iç içe olduğu kadar açık değildir olacaktır. –

+0

Sadece iç içe olsaydım nefret ediyorum. Ben XQuery 1.1 örneğini beğendim, bu yüzden cevap olarak işaretledim. – Sixty4Bit

3

Sadece ifadeler eğer bir dizi kullanın.

Bu yöntemlerden hangisinin daha verimli olduğu, kullandığınız XQuery işlemcisine bağlı olacaktır. İdeal bir dünyada, yalnızca uygun bir yöntem seçmek için optimizatöre olması gerektiği gibi, sadece bir tat meselesi olmalıdır, ancak performans önemliyse, her iki versiyonu da karşılaştırmaya değer. Bir işlemci örneğinizin düğüm yapısını optimize ettiyse ve örneğimi özel bir anahtarla optimize etmemiş olsaydım çok şaşırırdım. Eğer böyle bir şey kullanabilirsiniz

Saxon için
+0

Bazen yapmakta olduğunuzu unutmazsanız gerçekten ne yaptığınızı gizlemek güzel ve zariftir ... – Ar3s

+0

Bunu reddettim çünkü soru anahtarın/kasanın sözdizimini bulmaya çalışıyor çünkü/else. – Sixty4Bit

+0

@ Sixty4Bit - Soruyu cevapladığımda anahtarın davranışı kesinleşmedi, bu yüzden Şubat ayında ikinci cevabımı yayınladım! –

2

, o zaman basitçe yapabilirsiniz:

switch ($room) 
    case "bathroom" return "loo" 
    case "kitchen" return "scullery" 
    default return "just a room" 
XQuery 1.1 ile başlayarak 0
İlgili konular