无效强制转换:() as xs:string in xdmp:xslt-eval
Invalid coercion: () as xs:string in xdmp:xslt-eval
我正在利用 MarkLogic 在 XSL 转换中调用 XQuery 函数的能力。
假设我有一个 XQuery 库,其函数签名如下所示。这仅用于说明目的。
declare function my-func:ex-join($first as xs:string, $last as xs:string) as xs:string
{
fn:concat($first, '-', $last)
}
从 XQuery 中,我可以使用空序列作为参数调用此函数,没有任何问题,即
ex-join((), '1244')
该函数只会 return 一个空序列,但我没有收到任何错误。如果我尝试在我的 XSL 转换中使用所有这些函数,如:
<xsl:value-of select="my-func:ex-join(//node/value/text(), 'something')"/>
如果 /node/value 不存在,并且传入一个空序列,我会得到强制转换错误。
除了在 select 之前检查 XSL 中的值之外,是否有人有解决强制转换问题的建议?这些是自动生成的 XSL 模板,这意味着需要进行大量编码检查。
谢谢,
-tj
在 XQuery 中调用该函数的尝试也会失败。可能是由于函数映射,您没有注意到这一点。将以下内容放在 XQuery 代码的顶部:
declare option xdmp:mapping "false";
接下来,您只需更改函数的签名以接受空序列。将 as xs:string
替换为 as xs:string?
:
declare function my-func:ex-join($first as xs:string?, $last as xs:string?) as xs:string
fn:concat
将接受空序列作为参数,因此无需进一步更改即可使其工作..
HTH!
我正在利用 MarkLogic 在 XSL 转换中调用 XQuery 函数的能力。
假设我有一个 XQuery 库,其函数签名如下所示。这仅用于说明目的。
declare function my-func:ex-join($first as xs:string, $last as xs:string) as xs:string
{
fn:concat($first, '-', $last)
}
从 XQuery 中,我可以使用空序列作为参数调用此函数,没有任何问题,即
ex-join((), '1244')
该函数只会 return 一个空序列,但我没有收到任何错误。如果我尝试在我的 XSL 转换中使用所有这些函数,如:
<xsl:value-of select="my-func:ex-join(//node/value/text(), 'something')"/>
如果 /node/value 不存在,并且传入一个空序列,我会得到强制转换错误。
除了在 select 之前检查 XSL 中的值之外,是否有人有解决强制转换问题的建议?这些是自动生成的 XSL 模板,这意味着需要进行大量编码检查。
谢谢,
-tj
在 XQuery 中调用该函数的尝试也会失败。可能是由于函数映射,您没有注意到这一点。将以下内容放在 XQuery 代码的顶部:
declare option xdmp:mapping "false";
接下来,您只需更改函数的签名以接受空序列。将 as xs:string
替换为 as xs:string?
:
declare function my-func:ex-join($first as xs:string?, $last as xs:string?) as xs:string
fn:concat
将接受空序列作为参数,因此无需进一步更改即可使其工作..
HTH!