在 XSL 中,从变量中的文件名中删除路径



我在氧气工作,正在使用撒克逊语。

我正在搜索一堆xml文件以搜索jpg名称。我正在创建 变量如下:

<xsl:variable name="allxml" 
select="collection('..//xml/?select=*.xml;recurse=yes')"/>
<xsl:variable name="jpgs" select="$allxml//element/@n"/>

$jpgs看起来像:

目录1/jpg001.jpg 目录1/jpg002.jpg 目录1/jpg003.jpg

等。

我想剥离目录信息,但我很难。我试过使用tokenize()substring-after(),但都返回类似的错误。

"不允许将多个项目的序列作为 fn:tokenize(( (

"dir1/jpg001.jpg", "dir1/jpg002.jpg" "dir1/jpg003.jpg"(."

因为我不知道自己在做什么,我不知道自己做错了什么。谁能帮我弄清楚?

您没有显示代码,但从错误消息中听起来好像您尝试应用tokenize($jpgs).

错误消息告诉您要tokenize()的第一个参数必须是单个字符串,但您为其提供了一系列字符串。

您需要将tokenize()应用于$jpgs值序列中的每个项目。

您可以使用xsl:for-each对序列中的项进行迭代:

<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()] "/>

最新更新