2008-09-17 13 views

उत्तर

22

XQuery 1.1 के साथ शुरू, का उपयोग स्विच:

http://www.w3.org/TR/xquery-11/#id-switch

switch ($animal) 
    case "Cow" return "Moo" 
    case "Cat" return "Meow" 
    case "Duck" return "Quack" 
    default return "What's that odd noise?" 
3

XQuery में तत्वों के अलावा किसी अन्य चीज़ पर स्विच करने के लिए कोई फ़ंक्शन नहीं है।

पहली चीज जो आप करते हैं वह आपकी स्ट्रिंग को तत्व में परिवर्तित कर देती है।

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

तो सिर्फ एक सामान्य स्विच करने के लिए typeswitch का उपयोग करें:

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

कृपया ध्यान दें, यह एक MarkLogic एकमात्र समाधान हो सकता है।

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

एक typeswitch का उपयोग छिपा है क्या तुम सच में कर रहे हैं:

+1

यह समाधान (चाहिए) किसी भी XQuery प्रोसेसर में काम करेंगे, लेकिन सीधा नेस्टेड अगर समाधान के रूप में के रूप में स्पष्ट नहीं है। –

+0

अगर मैं सिर्फ घोंसला से नफरत करता हूं। मुझे XQuery 1.1 उदाहरण पसंद है इसलिए मैंने इसे उत्तर के रूप में चिह्नित किया। – Sixty4Bit

3

बस अगर भाव की एक श्रृंखला का उपयोग करें।

इनमें से कौन सी विधियां सबसे अधिक कुशल हैं आप XQuery प्रोसेसर पर निर्भर करते हैं। एक आदर्श दुनिया में यह केवल स्वाद का विषय होना चाहिए, क्योंकि यह उपयुक्त विधि का चयन करने के लिए अनुकूलक के लिए नीचे होना चाहिए, लेकिन यदि प्रदर्शन महत्वपूर्ण है तो यह दोनों संस्करणों को बेंचमार्क करने योग्य है। अगर कोई प्रोसेसर आपके उदाहरण से नोड निर्माण को अनुकूलित करता है तो मुझे आश्चर्य होगा, और मेरे उदाहरण को एक विशेष स्विच में अनुकूलित नहीं किया।

+0

कभी-कभी यह छिपाने के लिए अच्छा और सुरुचिपूर्ण है कि आप वास्तव में क्या करते हैं अगर आप यह नहीं भूलते कि आप इसे कर रहे हैं ... – Ar3s

+0

मैंने इसे वोट दिया क्योंकि सवाल स्विच/केस के सिंटैक्स को खोजने की कोशिश कर रहा है, अगर नहीं। – Sixty4Bit

+0

@ Sixty4Bit - जब मैंने सवाल का जवाब दिया तो स्विच का व्यवहार अंतिम रूप दिया गया था, इसलिए मैंने फरवरी में अपना दूसरा जवाब पोस्ट किया था! –

1

सेक्सन के लिए आप कुछ इस तरह उपयोग कर सकते हैं:

declare function a:fn($i) { 
typeswitch ($i) 
case element(a:elemen1, xs:untyped) return 'a' 
case element(a:elemen2, xs:untyped) return 'b' 
default return "error;" 
}; 

सादर

http://rrusin.blogspot.com/2010/01/embedding-xquery-in-java.html

2

अपने प्रोसेसर XQuery 1.1 का समर्थन करता है, तो आप बस कर सकते हैं:

switch ($room) 
    case "bathroom" return "loo" 
    case "kitchen" return "scullery" 
    default return "just a room" 
संबंधित मुद्दे