문제

문자열로 들어오는 외부 변수가 있는데 이에 대한 스위치/케이스를 수행하고 싶습니다.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} {}

그런 다음 typeswitch를 사용하여 일반 스위치를 수행하십시오.

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