XQuery에서 문자열을 어떻게 켜나요?
-
01-07-2019 - |
문제
문자열로 들어오는 외부 변수가 있는데 이에 대한 스위치/케이스를 수행하고 싶습니다.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
제휴하지 않습니다 StackOverflow