在模板中使用2个XSLT子串函数

时间:2015-11-18 21:11:02

标签: xslt substring

为什么我不能在模板中使用这个XSLT字符串函数?

<xsl:with-param name="text" select="substring($text,'2') and substring($text,1,(string-length($text)-1))" />

以下是模板:

<!-- Template to remove double quotes if available in first and last position of any field -->
  <xsl:template name="remove-quotes">
    <xsl:param name="text"/>
   <xsl:param name="quot" select="'&quot;'"/>
   <xsl:param name="trim1" select="substring($text,'2')"/>
   <xsl:param name="trim2" select="substring($text,1,(string-length($text)-1))"/>
  <xsl:choose>
  <xsl:when test="starts-with($text,$quot) and ends-with($text,$quot)">
        <xsl:call-template name="remove-quotes">
      <xsl:with-param name="text" select="$trim1 and $trim2"/> 
    </xsl:call-template>
    </xsl:when>
  <xsl:otherwise>
        <xsl:value-of select="$text"/>
    </xsl:otherwise>
    </xsl:choose>
   </xsl:template>

由:

调用
<xsl:call-template name="remove-quotes">
 <xsl:with-param name="text" select="XXXXX"/>
</xsl:call-template>

2 个答案:

答案 0 :(得分:0)

我不确定你的模板是做什么的,但当然这部分没有意义:

<xsl:call-template name="remove-quotes">
    <xsl:with-param name="text" select="$trim1 and $trim2"/> 
</xsl:call-template>

and是布尔运算符。包含and的表达式会返回true()false()的结果。

同样的事情:

<xsl:with-param name="text" select="substring($text,'2') and substring($text,1,(string-length($text)-1))" />

加了:

要删除前导或尾随引号或两者,您可以简单地执行:

<xsl:variable name="lead" select="number(starts-with($text, '&quot;'))" />
<xsl:variable name="trail" select="number(ends-with($text, '&quot;'))" />
<xsl:value-of select="substring($text, 1 + $lead, string-length($text) - $lead - $trail)" />

答案 1 :(得分:0)

XSLT模板:

    <!-- Template to remove trailing and leading double quotes from the fields -->
     <xsl:template name="remove-quotes">
    <xsl:param name="text"/>
    <xsl:param name="quot" select="'&quot;'"/>
    <xsl:param name="lead" select="number(starts-with($text, '&quot;'))"/>
    <xsl:param name="trail" select="number(ends-with($text, '&quot;'))"/>
    <xsl:choose>
    <xsl:when test="starts-with($text,$quot) and ends-with($text,$quot)">
        <xsl:call-template name="remove-quotes">
      <xsl:with-param name="text" select="substring($text, 1 + $lead, string-length($text) - $lead - $trail)"/> 
    </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="$text"/>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:template>

像这样调用:

    <xsl:call-template name="remove-quotes">
                <xsl:with-param name="text" select="SampleText"/>
    </xsl:call-template>