2017-09-14 39 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。這解決了我的問題。 –

相關問題