环境: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
一样在本地进行“转换”。
预先感谢您帮助解决此错误。
答案 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)