XSLT“包含”函数来检查周期

时间:2009-07-14 16:38:59

标签: xslt

好的,我很难过。我想测试发送到XSLT模板的参数是否包含句点,如果不包含则打印出引号。我要测试的参数是下面模板中的“值”。似乎包含函数应该可以工作,但由于某种原因,无论“值”的内容如何,​​引号总是被输出。我究竟做错了什么?感谢

<!-- 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 个答案:

答案 0 :(得分:1)

当我打电话给你的模板时,它运行正常。你怎么称呼它?这是我用过的:

<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