MarkLogic XML转换中的XSLT 3.0支持 [英] XSLT 3.0 support in Marklogic xml transformation

查看:15
本文介绍了MarkLogic XML转换中的XSLT 3.0支持的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是MarkLogic XSLT转换的新手,我有以下问题。

MarkLogic使用什么XSLT引擎来转换使用xdmp:xslt-invoke()函数的文档?有没有办法在MarkLogic中支持XSLT 3.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)

请告诉我如何解决这个问题

推荐答案

MarkLogic支持XSLT2.0,但这并不妨碍您使用内存样式映射。

只需在样式表中声明MarkLogic映射名称空间,即可访问MarkLogic的映射函数。只需注意一个关键区别,那就是MarkLogic的映射是可变的,而XSLT 3.0中的AS映射是不可变的。

换句话说,如果您使用map:put($map, "a", "b")向MarkLogic地图添加/更改/删除内容,则地图$map将直接就地更改-当您稍后尝试执行map:get($map, "a")操作时,您将获得a的最新版本,即。

如果您尝试在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>

这篇关于MarkLogic XML转换中的XSLT 3.0支持的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆