سؤال

لدي متغير خارجي يأتي كسلسلة وأرغب في إجراء تبديل/حالة عليه.كيف أفعل ذلك في xquery؟

هل كانت مفيدة؟

المحلول

بدءًا من 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?" 

نصائح أخرى

ما عليك سوى استخدام سلسلة من تعبيرات if:

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

يؤدي استخدام مفتاح الكتابة إلى إخفاء ما تفعله بالفعل.

تعتمد أي من هذه الطرق الأكثر كفاءة على معالج XQuery الذي تستخدمه.في عالم مثالي، ينبغي أن يكون الأمر مجرد مسألة ذوق، حيث يجب أن يكون الأمر متروكًا للمُحسِّن لاختيار الطريقة المناسبة، ولكن إذا كان الأداء مهمًا، فإن الأمر يستحق قياس كلا الإصدارين.سأكون مندهشًا للغاية إذا قام المعالج بتحسين بناء العقدة من المثال الخاص بك، ولم يقوم بتحسين المثال الخاص بي إلى محول متخصص.

لا يحتوي XQuery على وظيفة لتشغيل أي شيء آخر غير العناصر.

أول شيء تفعله هو تحويل السلسلة إلى عنصر.

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

ثم استخدم فقط تبديل الكتابة لإجراء تبديل عادي:

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

يرجى ملاحظة أن هذا قد يكون الحل الوحيد لـ MarkLogic.

إذا كان المعالج الخاص بك يدعم XQuery 1.1، فيمكنك ببساطة القيام بما يلي:

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

بالنسبة إلى Saxon، يمكنك استخدام شيء مثل هذا:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top