在XSLT中显示样式表参数:Saxonica参数查询技术问询
Saxonica获取样式表参数名称的方法
是的,Saxonica支持在XQuery中获取传递给transform:transform的参数名称,根据你的需求(预先不知道传入参数),可以通过以下两种方式实现:
1. 提取实际传入的参数名称
如果你需要获取调用transform:transform时实际传入的所有参数,可以将参数封装为映射(map)类型,再通过map:keys()函数直接提取参数名称:
declare namespace transform = "http://saxon.sf.net/transform"; let $input-params := map { 'user-id': '123', 'display-mode': 'compact', 'custom-filter': true() } let $param-names := map:keys($input-params) return ( transform:transform( doc("input.xml"), doc("stylesheet.xsl"), $input-params ), $param-names )
这段代码会返回所有传入的参数名称列表,完全不需要预先知道参数的具体名称。
2. 获取样式表声明的参数(可选)
如果需要获取样式表中显式声明的顶层参数(即<xsl:param>定义的参数),可以使用Saxon的扩展函数访问样式表的元数据:
declare namespace saxon = "http://saxon.sf.net/"; declare namespace transform = "http://saxon.sf.net/transform"; let $compiled-stylesheet := saxon:compile-stylesheet(doc("your-stylesheet.xsl")) let $declared-params := saxon:declared-parameters($compiled-stylesheet) return $declared-params ! string(.)
这种方法仅能获取样式表中定义的参数,无法捕获未在样式表中声明但被传入的参数。
注意事项
- 确保XQuery环境启用了Saxon扩展函数支持,并且正确声明了对应的命名空间;
- 若使用Saxon HE版本,部分扩展功能可能受限,建议使用PE或EE版本以获得完整支持。
内容的提问来源于stack exchange,提问作者lschult2
相关产品推荐
相关产品推荐

