You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fn:collection()和fn:base-uri()获取JSON文件URI遇类型错误求助

解决XSLT获取JSON文件URI的报错问题

问题根源

当你用fn:collection()加载JSON文件时,XSLT会把JSON解析成map或array类型的对象,而fn:base-uri()的参数要求必须是node()类型(比如XML文档节点),直接传解析后的JSON对象自然会报错。而XML文件加载后是节点树,符合base-uri()的参数要求,所以之前的代码对XML有效。

具体解决方法

方法1:直接获取文件URI(无需解析JSON内容)

用fn:uri-collection()替代fn:collection(),这个函数会直接返回指定文件夹下所有匹配文件的URI序列,不会解析文件内容,完美解决你的需求:

<xsl:template match="/">
  <xsl:for-each select="uri-collection('file:///你的文件夹路径/?select=*.json')">
    <file><xsl:value-of select="."/></file>
  </xsl:for-each>
</xsl:template>

注意把路径替换成你实际的文件夹URI,比如Windows下可能是file:///C:/data/json-files/?select=*.json。

方法2:同时获取URI和JSON内容

如果需要同时拿到JSON文件的URI和解析后的内容,可以给collection()添加参数,让它返回包含元数据的map:

<xsl:template match="/">
  <xsl:for-each select="collection('file:///你的文件夹路径/?select=*.json;format=json;item-kind=map')">
    <!-- 获取文件URI -->
    <uri><xsl:value-of select="?base-uri"/></uri>
    <!-- 获取解析后的JSON对象(map类型),可进一步处理 -->
    <content><xsl:value-of select="?json"/></content>
  </xsl:for-each>
</xsl:template>

这里的item-kind=map参数让每个集合项变成一个包含base-uri(文件URI)和json(解析后的JSON对象)的map,既满足拿URI的需求,也能同时处理JSON内容。


内容的提问来源于stack exchange,提问作者Shud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:17:44