xslt - 在 XSL 中从变量中的文件名中删除路径
问题描述
我在 Oxygen 工作,正在使用 Saxon。
我正在搜索一堆 xml 文件以搜索 jpg 名称。我正在创建如下变量:
<xsl:variable name="allxml"
select="collection('..//xml/?select=*.xml;recurse=yes')"/>
<xsl:variable name="jpgs" select="$allxml//element/@n"/>
$jpgs 看起来像:
dir1/jpg001.jpg dir1/jpg002.jpg dir1/jpg003.jpg
等等
我想剥离目录信息,但我很难过。我试过使用
tokenize()
and substring-after()
,但都返回类似的错误。
“fn:tokenize() ("dir1/jpg001.jpg", "dir1/jpg002.jpg" "dir1/jpg003.jpg") 的第一个参数不允许包含多个项目的序列。"
因为我不知道自己在做什么,所以我不知道自己做错了什么。谁能帮我弄清楚?
解决方案
您没有显示您的代码,但从错误消息中听起来好像您尝试应用tokenize($jpgs)
.
错误消息告诉您第一个参数tokenize()
必须是单个字符串,但您给它的是一个字符串序列。
您需要应用tokenize()
到值序列中的每个项目$jpgs
。
您可以使用xsl:for-each
to 迭代序列中的项目:
<xsl:for-each select="$jpgs">
<xsl:sequence select="tokenize(., '/')[last()] "/>
</xsl:for-each>
或者您可以使用 for 表达式:
<xsl:sequence select="for $path in $jpgs return tokenize($path, '/')[last()] "/>
推荐阅读
- android - 如何从firebase获取基于时间戳的排序数据
- spring-boot - 单独捕获所有请求和响应
- go - 可以使用无缓冲通道接收信号吗?
- c# - 无法在 Identity Server 4 中正确实现 IProfileService
- javascript - channel.type.toUpperCase 不是函数(discord.js/src/client/actions/ChannelUpdate.js:15)
- php - 在laravel中关系雄辩?
- mysql - 基本减法查询语句
- c# - SQLite 错误 19:“唯一约束失败:PosterDto.Id”
- css - 为什么 Canvas 在同一个 html 文档中的两个单独的画布元素上以不同的方式绘制具有相同宽度和长度的相同图像?
- reactjs - Reactjs ag-grid 模块转换 - Module[] 不可分配给类型 (/ag-grid-community/dist/lib/interfaces/iModule).Module[]