我在氧气工作,正在使用撒克逊语。
我正在搜索一堆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()] "/>