XSLT绝对路径的相对路径

时间:2017-12-21 18:00:54

标签: xpath xslt-1.0

如何提取给定文件的根文件夹的路径?

我有表达式

path/to/one/of/my/file.xml

我必须得到

../../../../../

使用XSLT / XPath?

1 个答案:

答案 0 :(得分:0)

因为fn:tokenize是XPath 2.0函数,所以必须使用递归模板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" />

  <xsl:template match="/">
    <!-- initial call with path to tokenize -->
    <xsl:call-template name="tokenize">
      <xsl:with-param name="str" select="'path/to/one/of/my/file.xml'" />
    </xsl:call-template>    
  </xsl:template>

  <!-- recursive named template -->      
  <xsl:template name="tokenize">
    <xsl:param name="str" />
    <xsl:param name="result" select="''" />
    <xsl:choose>
      <xsl:when test="substring-after($str,'/')">
        <xsl:call-template name="tokenize">
          <xsl:with-param name="str" select="substring-after($str,'/')" />
          <xsl:with-param name="result" select="concat($result,'../')" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$result" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

<强>输出:

../../../../../