gpt4 book ai didi

Marklogic 将空节点传递给 xquery 函数

转载 作者:行者123 更新时间:2023-12-01 12:20:54 25 4
gpt4 key购买 nike

这是我在 MarkLogic XQuery 管理器中开发功能的尝试的一个微不足道的简化。我尝试编写的函数必须能够接收空节点作为输入。我一直试图通过 ()意思是“空节点”,它似乎只是在没有任何痕迹的情况下崩溃。

例如,显示的简单示例预计会简单地返回数字“1”,但事实并非如此。如果我改为传递一个小的非空 XML 文档,那么这个简单的例子就起作用了。

在传递一个空节点时,我的推理有什么问题?

declare function local:x ($i as node()) as xs:string*

{ let $x := "1"

return $x
};

local:x ( () );

最佳答案

您的问题是您的函数只需要一个 node()而不是 empty-sequence() (这是您通过像这样调用您的函数来提供的: local:x( () ) )

不能将空序列转换为节点。
如果你想提供一个期望 的函数零或一 节点你可以这样做:

declare function local:x($i as node()?) as xs:string* {
let $x := "1"
return $x
(:
Also instead of doing the above you could also simply return the string directly by simply typing it out:
"1"
:)
};

问号是这里的关键:

Some functions accept a single value or the empty sequence as an argument and some may return a single value or the empty sequence. This is indicated in the function signature by following the parameter or return type name with a question mark: "?", indicating that either a single value or the empty sequence must appear.



(取自 W3C)

您应该注意的一件事是空序列是 不是 与例如相同一个空的文本节点!
let $emptySeq := () (:This actually has no value at all:)
let $emptyText := text {} (:This simply is an empty node, but it is still a node!:)
return (fn:empty($emptySeq), fn:empty($emptyText))

这将返回 (true, false)

关于Marklogic 将空节点传递给 xquery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com