给出示例路径C:\ example \ innerExample \ file.txt,我想使用此正则表达式提取带有扩展名的文件名,您可以see it here。
<xsl:analyze-string select="$filePath" regex="$regexPattern" flags="mis">
<xsl:matching-substring>
<xsl:value-of select="concat(regex-group(2), regex-group(3))"/>
</xsl:matching-substring>
</xsl:analyze-string>
这是我的xslt代码,我缺少什么吗?
答案 0 :(得分:1)
无需进行尝试(我无法复制),我相信您可以使用以下方式提取带有扩展名的文件名:
<xsl:value-of select="tokenize($filepath, '\\')[last()]"/>
答案 1 :(得分:1)
您尚未向我们展示具有正确值的完整但最少的示例,但已进行了纠正,即没有在方括号中转义/
,我认为您的模式适用于XSLT / XPath 2及更高版本: >
输入
<root>
<data>C:\example\innerExample\file.txt</data>
</root>
已通过
转换为https://xsltfiddle.liberty-development.net/jyRYYhM<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="regexPattern" as="xs:string">^(.*)[/|\\](.*)(\..*)</xsl:param>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="data">
<xsl:copy>
<xsl:analyze-string select="." regex="{$regexPattern}" flags="mis">
<xsl:matching-substring>
<xsl:value-of select="concat(regex-group(2), regex-group(3))"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
进入
<root>
<data>file.txt</data>
</root>
(我在那里使用过XSLT 3,但我认为XSLT 2和3之间在xsl:analyze-string
方面没有变化)。