我是Marklogic XSLT转换的新手,我有以下问题。
Marklogic使用什么XSLT引擎来转换使用xdmp:xslt-invoke()函数的文档?有没有办法在Marklogic中支持XSLT3.0版本?
我正在尝试使用XSLT 3.0版本,该版本具有用于转换的以下变量
<xsl:variable name="format-map" as="map(xs:string,xs:string)">
在Marklogic中使用xdmp:xslt-invoke()函数时出现以下错误
XSLT-BADSEQTYPE: (err:XTSE0020) /*:stylesheet/*:variable[1] -- Invalid sequence type: /*:stylesheet/*:variable[1]/@as (XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected Lpar_, expecting $end)
请告诉我如何解决这个问题
发布于 2020-09-03 05:46:39
MarkLogic支持XSLT2.0,但这并不能阻止您使用内存中样式的映射。
只需在样式表中声明MarkLogic名称空间,然后就可以访问MarkLogic的map函数。只需注意一个关键区别,即MarkLogic的映射是可变的,而XSLT 3.0中的as映射是不可变的。
换句话说,如果您添加/更改/删除内容到MarkLogic地图,比如使用map:put($map, "a", "b"),地图$map将直接就地更改-当您稍后尝试执行map:get($map, "a")时,您将获得a的最新版本,即"b“。
如果您尝试在XSLT 3.0中更新一个映射,您将得到一个全新的更新后的不可变副本。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:map="http://marklogic.com/xdmp/map"
exclude-result-prefixes="map"
version="2.0">
<xsl:variable name="my-map" as="map:map" select="map:map()" />
<xsl:template match="/">
<xsl:sequence select="map:put($my-map, 'a', 'b')"/>
<xsl:value-of select="map:get($my-map, 'a')"/>
</xsl:template>
</xsl:stylesheet>https://stackoverflow.com/questions/63702447
复制相似问题