我试图使用一些字符串函数在 XSLT 中提取文件名的一部分,但不明白为什么它不起作用。
以下是我运行的 XSLT 示例:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:str="http://exslt.org/strings">
<xsl:output method="text"/>
<xsl:variable name="A" >some.filename.test.CCYYMMDD.xml</xsl:variable>
<xsl:variable name="fileDateSplitChar" select="'.'"/>
<xsl:template match="/">
<xsl:text>split char : </xsl:text>
<xsl:value-of select="str:split($A,$fileDateSplitChar)[last()]"/>
<xsl:text>split nodeset : </xsl:text>
<xsl:value-of select="str:split($A,$fileDateSplitChar)"/>
<xsl:text>substring-before : </xsl:text>
<xsl:value-of select="substring-before(str:split($A,$fileDateSplitChar)[last()],
'xml')"/>
</xsl:template>
</xsl:stylesheet>
我试图实现的是提取文件名的一部分,CCYYMMDD。当我运行它时,第一条消息正确显示拆分字符;第二条消息返回值"一些";但第三条消息的结果是空白的。
我正在使用 XSLT 1.0。
但第三条消息的结果是空白的。
结果为空,因为:
str:split($A,$fileDateSplitChar)[last()]
返回"XML",并且:
substring-before('xml, 'xml')"
返回一个空字符串。
我试图实现的是提取文件的一部分 中新网.
我假设您不知道这部分的序号位置,只是它是最后一个之前的序号位置 - 因此可以使用以下命令提取它:
str:split($A,$fileDateSplitChar)[last() - 1]
EXSLT str:split 函数返回一个节点集(因为这是 XSLT 1.0 中唯一可用的数据结构)。 <xsl:value-of>
应用于节点集时,显示第一个节点的字符串值,并忽略所有其他节点。类似地,substring-before() 应用于节点集时处理集合中的第一个节点,并忽略其余节点。
您真的无法升级到 XSLT 2.0 吗?