我试图在字符串中得到与'/‘分开的最新单词,但出于某种原因,我得到了错误
Error checking type of the expression 'funcall(tokenize, [variable-ref(effect/node-set), literal-expr(/)])'.我知道它只支持xsl版本2,我认为我已经这样做了,就像在xsl文件中所看到的那样。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/1999/xlink"
exclude-result-prefixes="xlink"
>
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<Tracks>
<xsl:apply-templates select="//Tracks"/>
</Tracks>
</xsl:template>
<xsl:template match=
"//MidiTrack">
<MidiTrack>
<xsl:attribute name="id">
<xsl:value-of select="@Id"/>
</xsl:attribute>
<Effects>
<xsl:for-each select="descendant::DeviceChain/Devices/*">
<xsl:variable name="effect" select="descendant::LastPresetRef/descendant::RelativePath/@Value"/>
<xsl:if test="$effect">
<Name>
<xsl:value-of select="substring-after($effect, 'Devices/Audio Effects/')"/>
</Name>
</xsl:if>
</xsl:for-each>
</Effects>
</MidiTrack>
</xsl:template>
<xsl:template match=
"//ReturnTrack">
<ReturnTrack>
<xsl:for-each select="descendant::DeviceChain/Devices/*">
<xsl:variable name="effect" select="descendant::LastPresetRef/descendant::Path/@Value"/>
<xsl:if test="$effect">
<Name>
<xsl:value-of select="tokenize($effect, '/')"/>
</Name>
</xsl:if>
</xsl:for-each>
</Effects>
</ReturnTrack>
</xsl:template>
</xsl:stylesheet>如果我用子字符串替换tokenize后,它不会抱怨参数。标记部件的一个小型xml示例
<LastPresetRef>
<Value>
<FilePresetRef Id="1">
<FileRef>
<RelativePathType Value="0" />
<RelativePath Value="" />
<Path Value="/Reverb Default.adv" />
<Type Value="1" />
<LivePackName Value="" />
<LivePackId Value="" />
<OriginalFileSize Value="0" />
<OriginalCrc Value="0" />
</FileRef>
</FilePresetRef>
</Value>
</LastPresetRef>如果我在这个网站http://xslttest.appspot.com/中使用tokenize函数运行我的代码,它将完美地工作。不知道我在这里错过了什么。
不确定是否值得注意,但我在javax.xml.transform.TransformerFactory的帮助下运行了这个模板
更新:
好的,正如注释中提到的,我将转换器替换为Saxon,它现在捕获字符串,但由于某种原因,它将'/‘替换为’/‘。例如,如果我有aa/ bb /cc,它返回aa bb。
发布于 2022-10-11 21:20:38
正如Martin在评论中所建议的,将java库更改为使用Saxon版本11.4和使用last()就可以了。
https://stackoverflow.com/questions/74033920
复制相似问题