代码之家  ›  专栏  ›  技术社区  ›  Steve

用于检查期间的xslt“contains”函数

  •  0
  • Steve  · 技术社区  · 15 年前

    好吧,我被难住了。我希望测试发送到XSLT模板的参数是否包含句点,如果不包含句点,则打印引号。我要测试的参数是下面模板中的“value”。似乎contains函数应该可以工作,但是出于某种原因,不管“value”的内容如何,都会输出引号。我做错什么了?谢谢

    <!-- Add a JSON property -->
    <xsl:template name="addProperty">
        <xsl:param name="name" />
        <xsl:param name="value" />
    
        <xsl:value-of select="$name" />
        <xsl:text>:</xsl:text>
        <xsl:if test="not(contains($value,'.'))">'</xsl:if>
        <xsl:value-of select="$value" />
        <xsl:if test="not(contains($value,'.'))">'</xsl:if>
        <xsl:text>,</xsl:text>      
    </xsl:template>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   lavinio    15 年前

    当我调用模板时,它工作正常。你怎么称呼它?这是我用过的:

    <xsl:call-template name="addProperty">
        <xsl:with-param name="name" select="'abc'"/>
        <xsl:with-param name="value" select="'123'"/><!-- quoted number -->
    </xsl:call-template>
    <xsl:call-template name="addProperty">
        <xsl:with-param name="name" select="'abc'"/>
        <xsl:with-param name="value" select="123"/><!-- NOT quoted number -->
    </xsl:call-template>
    <xsl:call-template name="addProperty">
        <xsl:with-param name="name" select="'xyz'"/>
        <xsl:with-param name="value" select="'456.789'"/><!-- quoted number -->
    </xsl:call-template>
    <xsl:call-template name="addProperty">
        <xsl:with-param name="name" select="'xyz'"/>
        <xsl:with-param name="value" select="456.789"/><!-- NOT quoted number -->
    </xsl:call-template>
    

    这就是我得到的输出:

    abc:'123',abc:'123',xyz:456.789,xyz:456.789,
    

    是否不能将值传递给您认为要传递的命名模板?您使用的是什么XSLT引擎?

    测试这一点的一个好方法是将类似这样的东西添加到命名模板中,并查看它产生的结果,如果您手头没有一个好的调试器:

    XXX<xsl:value-of select="$value"/>XXX
    YYY<xsl:value-of select="contains($value, '.')"/>YYY
    ZZZ<xsl:value-of select="not(contains($value, '.'))"/>ZZZ