如何使用 XSL 1.0 分割文件路径

问题描述 投票:0回答:1

我们的测试执行人员使用样式表来生成测试报告。我们正在努力定制该报告。 由于对 XSL 和 Xpath 的了解有限,我试图获取文件路径的各个组成部分并将它们呈现在报告中。我们仅限于 XSL 1.0。

返回一个文件路径,例如: C: lahblahblah\部分 ev estname.seq C:啊...是可变长度的。 剩余的路径结构将始终是..\part ev estname.seq

我想要的是:

测试名称: 零件: 版本:

我尝试了 substring-before / substring-after 的各种嵌套,但是,相关部分之前的文件路径部分可以具有不同的大小。

我能做的最好的事情就是删除文件扩展名,因为我在这方面不是很了解。

xslt-1.0 teststand
1个回答
0
投票

考虑以下示例:

XML

<input name="C:\blah\blaah\blaaah\part\rev\testname.seq"/>

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="input">
    <results>
        <xsl:call-template name="parse-path">
            <xsl:with-param name="text" select="@name"/>
        </xsl:call-template>
    </results>
</xsl:template>

<xsl:template name="parse-path">
    <xsl:param name="text"/>
    <xsl:variable name="n" select="string-length(translate($text, translate($text, '\', ''), ''))"/>

    <xsl:if test="$n=2">
        <part>
            <xsl:value-of select="substring-before($text, '\')"/>
        </part>
    </xsl:if>
    <xsl:if test="$n=1">
        <rev>
            <xsl:value-of select="substring-before($text, '\')"/>
        </rev>
    </xsl:if>
    <xsl:if test="$n=0">
        <testname>
            <xsl:value-of select="substring-before($text, '.')"/>
        </testname>
    </xsl:if>
    
    <xsl:if test="$n">
        <!-- recursive call -->
        <xsl:call-template name="parse-path">
            <xsl:with-param name="text" select="substring-after($text, '\')"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

结果

<?xml version="1.0" encoding="UTF-8"?>
<results>
   <part>part</part>
   <rev>rev</rev>
   <testname>testname</testname>
</results>
© www.soinside.com 2019 - 2024. All rights reserved.