2017-09-14 4 views
1

MarkLogicがXSL変換でXQuery関数を呼び出す機能を利用しています。無効な強制:xs:string in xdmp:xslt-eval

私は、次のような署名を持つ関数を持つXQueryライブラリを持っています。これは説明のためのものです。 XQueryのから

declare function my-func:ex-join($first as xs:string, $last as xs:string) as xs:string 
{ 
    fn:concat($first, '-', $last) 
} 

パラメータは、問題なく、すなわち

ex-join((), '1244') 

機能がちょうど空のシーケンスが返されますが、私はすべてのエラーを取得しないよう、私は空のシーケンスでこの関数を呼び出すことができます。私は私のXSLにしてから、すべてこの関数にしようとした場合のように、変換:

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

/ノード/値が存在せず、空のシーケンスが渡された場合、私は強制エラーが発生します。

選択の前にXSLの値をチェックする以外に、強制的な問題を回避する方法はありますか?これらは自動生成されたXSLテンプレートであり、多くのコード化されたチェックを意味します。

おかげで、

答えて

2

-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を!

+0

ありがとう@grtjn。それが私の問題を解決しました。 –

関連する問題