无效强制:()as xs:xdmp:xslt-eval中的字符串

时间:2017-09-14 06:45:05

标签: xslt-2.0 marklogic marklogic-9

我正在利用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')

该函数只返回一个空序列,但我没有收到任何错误。如果我在我的XSL转换中尝试所有这个函数,如:

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

如果 / node / value 不存在,并且传入空序列,则会出现强制错误。

除了在选择之前检查XSL中的值之外,是否有人有解决强制问题的建议?这些是自动生成的XSL模板,这意味着需要进行大量的编码检查。

谢谢,

-tj

1 个答案:

答案 0 :(得分: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!