XSLT模板 - 反斜杠返回问题

时间:2015-11-05 08:04:58

标签: xml xslt

我正在调用一个模板来填充变量。模板正在传递一个完整的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 \

任何建议都将不胜感激。

谢谢

2 个答案:

答案 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>