如何在XQuery中打开字符串?
时间:2020-03-05 18:59:30 来源:igfitidea点击:
我有一个作为字符串输入的外部变量,我想对其进行切换。如何在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的解决方案。
回答
只需使用一系列if表达式:
if ($room eq "bathroom") then "loo" else if ($room eq "kitchen") then "scullery" else "just a room"
使用类型开关隐藏了实际工作。
以下哪种方法最有效取决于我们使用的XQuery处理器。在理想的世界中,应该只考虑口味,因为应该由优化器选择合适的方法,但是如果性能很重要,则值得对两个版本进行基准测试。如果处理器从示例中优化了节点构造,并且没有将我的示例优化为专用交换机,我将感到非常惊讶。
回答
对于撒克逊人,我们可以使用类似以下的内容:
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
回答
如果处理器支持XQuery 1.1,则只需执行以下操作:
switch ($room) case "bathroom" return "loo" case "kitchen" return "scullery" default return "just a room"
回答
从XQuery 1.1开始,使用switch:
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?"