eXist-DB /查询XSL转换:未定义的上下文序列

时间:2018-10-19 17:25:58

标签: xquery xslt-2.0 exist-db xquery-3.0

环境:eXist-db 4.2.1,XQuery 3.1,XSLT 2.0

我正在尝试使用由eXist-DB / Query 3.1触发的XSLT 2.0样式表转换XML文档。我收到以下错误

err:XPDY0002 Undefined context sequence for 'child::{}xinclude-path' 
[at line 271, column 48, source: /db/apps/deheresi/modules/document.xql]

此错误指向document.xqm模块中的以下XQuery,第217行为</parameters>),(),xinclude-path=$globalvar:URIdb)

declare function document:doc-xsl-docview($node as node(), 
        $model as map(*), $currentdoc as xs:string)

{   
  let $currentdocnode := doc(concat($globalvar:URIdb,$currentdoc))

  let $xsltransform := transform:transform(
                        $currentdocnode, 
                        concat($globalvar:URIstyles,
                        "ms609__testxsl-withmodes.xsl"),
                        (<parameters>
                            <param name="paramPersonurl" value="{$globalvar:URLperson}"/>
                            <param name="paramPlaceurl" value="{$globalvar:URLplace}"/>
                            <param name="paramDocurl" value="{$globalvar:URLdoc}"/>
                         </parameters>),(),xinclude-path=$globalvar:URIdb)
return $xsltransform
 };

解释以上变量:

  • $currentdoc是一个文档名称,我将其转换为$currentdocnode的eXist-DB节点。

  • XML文档保存在$globalvar:URIdb = / db / apps / deheresi / data

  • XSLT样式保存在$globalvar:URIstyles doc = / db / apps / deheresi / styles

我将transformation with serialization用于xi:includes

transform:transform($node-tree as node()*, $stylesheet as item(), 
                $parameters as node()?, $attributes as node()?, 
                $serialization-options as xs:string?) as node()?

我需要传递xinclude-path = $ globalvar:URIdb以便告诉eXist-DB XML文档中xi:includes的处理位置。

我应该注意$globalvar是字符串,而不是节点。如果需要节点,则可以像上面$currentdocnode一样在本地进行“转换”。

预先感谢您帮助解决此错误。

1 个答案:

答案 0 :(得分:1)

docs for transform:transform请注意,序列化选项应为字符串:

transform:transform($node-tree as node()*, $stylesheet as item(), 
                $parameters as node()?, $attributes as node()?, 
                $serialization-options as xs:string?) as node()?

您需要将参数用引号引起来并与全局变量连接:

concat(`xinclude-path=`, $globalvar:URIdb)