我正在调用一个模板来填充变量。模板正在传递一个完整的UNC路径,并且只返回文件夹路径部分。但它正在将反斜杠改为正斜杠。
以下是模板:
<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>
$ filepath填充为:\ vboxsvr \ SharedFolder_Assets \ 90min.mov
我目前正在退回:// vboxsvr / SharedFolder / _Assets /我想要的时候:\ vboxsvr \ SharedFolder_Assets \
任何建议都将不胜感激。
谢谢
答案 0 :(得分: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:将'/'改为'\',产生了预期的结果
答案 1 :(得分: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>