为什么子字符串之前()在XSLT中对我不起作用



我试图使用一些字符串函数在 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 吗?

相关内容

  • 没有找到相关文章

最新更新