2017-09-14 15 views
1

我正在利用MarkLogic在XSL转换中调用XQuery函数的能力。强制无效:()as xs:xslt-eval中的xs:string

比方说,我有一个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') 

该函数将只返回一个空序列,但我没有得到任何错误。如果我尝试所有这些功能从我的XSL转换,如:

<xsl:value-of select="my-func:ex-join(//node/value/text(), 'something')"/> 

如果/节点/值不存在,和一个空的序列传递中,我得到了强制错误。

有没有人有建议来解决强制问题,除了在选择之前检查XSL中的值?这些是自动生成的XSL模板,这意味着很多编码检查。

感谢,

-tj

回答

2

试图调用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!

+0

Thanks @grtjn。这解决了我的问题。 –

相关问题