XSL解析文件名文件夹

时间:2017-05-05 09:17:01

标签: xml parsing xslt

我想要使用XSLT 1.0解析HTML文件 该文件的格式为<file name="/var/application-data/..../application/controllers/cgu.php" />

我想要它 <file filename="cgu.php" folderName="controller/"/>

我设法使用<xsl:value-of select="substring-before(substring(@name, 85), '/')"/>执行此操作 ,但我希望它适用于所有路径。 是否可以计算“/”的出现次数以仅检索路径的最后部分?

我使用递归模板只检索文件名,但我也需要文件夹名称

<xsl:template name="substring-after-last">
        <xsl:param name="string"/>
        <xsl:choose>
            <xsl:when test="contains($string, '/')">
                <xsl:call-template name="substring-after-last">
                    <xsl:with-param name="string" select="substring-after($string, '/')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$string"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

1 个答案:

答案 0 :(得分:0)

一种方法是将第一次调用的结果(获取文件名)存储在变量中,然后再次调用模板,但def main(_): # flag validity checks with slim.arg_scope([slim.variable], device='/cpu:0'): # Run evaluation on the CPUs # all my code that was previously in main() 属性被截断长度文件名(以便文件夹名称现在是最后一项)。

name

或者,如果您的进程支持它,您可以使用EXSLT的<xsl:template match="file"> <xsl:variable name="fileName"> <xsl:call-template name="substring-after-last"> <xsl:with-param name="string" select="@name" /> </xsl:call-template> </xsl:variable> <xsl:variable name="folderName"> <xsl:call-template name="substring-after-last"> <xsl:with-param name="string" select="substring(@name, 1, string-length(@name) - string-length($fileName) - 1)" /> </xsl:call-template> </xsl:variable> <file filename="{$fileName}" folderName="{$folderName}/"/> </xsl:template> 函数

tokenize