2015-11-05 132 views
0

我正在調用模板來填充變量。該模板正在傳遞完整的UNC路徑,並且僅返回文件夾路徑部分。但它正在將反斜槓改爲正斜槓。XSLT模板 - 反斜槓返回問題

這裏是模板:

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

,這裏是它是如何叫:

<xsl:variable name="folderpath"> 
<xsl:call-template name="substring-before-last"> 
    <xsl:with-param name="string" select="$filepath"/> 
    <xsl:with-param name="char" select="'\'"/> 
</xsl:call-template> 

$文件路徑填充:\ vboxsvr \ SharedFolder_Assets \ 90min.mov

我目前正在返回:// vboxsvr/SharedFolder/_Assets /當我想要:\ vboxsvr \ SharedFolder_Assets \

任何意見,將不勝感激。

謝謝

回答

0

那麼,你正在模板中輸出正斜槓,這可以解釋它...

<xsl:text>/</xsl:text> 

你真的需要輸出$char變量

<xsl:value-of select="$char" /> 

非常試試這個模板

<xsl:template name="substring-before-last"> 
    <xsl:param name="string"/> 
    <xsl:param name="char"/> 
    <xsl:if test="contains($string, $char)"> 
     <xsl:value-of select="substring-before($string, $char)"/> 
     <xsl:value-of select="$char" /> 
     <xsl:call-template name="substring-before-last"> 
     <xsl:with-param name="string" select="substring-after($string, $char)"/> 
     <xsl:with-param name="char" select="$char"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
+0

謝謝 – azz2912

0

我創建了一個測試,它確實像它應該工作!所以問題一定是別的。

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

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

<xsl:template match="A"> 
    <xsl:variable name="filepath" select="text()" /> 
    <xsl:variable name="folderpath"> 
    <xsl:call-template name="substring-before-last"> 
    <xsl:with-param name="string" select="$filepath"/> 
    <xsl:with-param name="char" select="'\'"/> 
    </xsl:call-template> 
    </xsl:variable> 
    <xsl:element name="B"> 
    <xsl:value-of select="$folderpath" /> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

與測試XML文件

?xml version="1.0" encoding="UTF-8" ?> 
<A>\vboxsvr\SharedFolder_Assets\90min.mov</A> 

給出了以下的(正確的)輸出:

xsltproc a.xslt a.xml 
    <?xml version="1.0" encoding="UTF-8"?> 
    <B>\vboxsvr\SharedFolder_Assets\</B> 

EDITED:改變 '/' 到 '\' 這產生所期望的結果