2017-09-14 18 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 템플릿으로 많은 코딩 된 검사를 의미합니다.

감사합니다,

-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

감사합니다. @ grtjn. 그게 내 문제를 해결해 줬어. –