我从LibXSLT得到了这个结果:
被调用的模板:
XSLTProcessor::transformToXml(): Invalid type
XSLTProcessor::transformToXml(): xmlXPathCompiledEval: 1 objects left on the stack.
我正在传递一个param
,它可以是字符串值或节点集。我正在尝试测试它是否包含某个子字符串,如果是,则将该值分配给另一个参数。
调用模板:
<xsl:call-template name="img">
<xsl:with-param name="upload" select="'url.com/image.jpg'"/>
<xsl:with-param name="w" select="200"/>
<xsl:with-param name="h" select="200"/>
</xsl:call-template>
被调用的模板:
<xsl:template name="img" match="*" mode="w">
<xsl:param name="upload" select="."/>
<xsl:param name="JITexternal">
<xsl:choose>
<xsl:when test="
not($upload/meta) and (contains($upload, '.jpg')
or
contains($upload, '.png'))
">
<xsl:value-of select="$upload"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
</xsl:template>
虽然我不确定是什么导致了LibXSLT的错误,但我认为当我运行这些测试并且值是一个字符串时,它会抛出上面的类型错误。
但最重要的是,有没有一种好的方法来测试参数值的类型?
$upload/meta
相对路径的主要表达式,而不是在首先声明$upload
为此meta
元素。这样,您可以使用meta
元素的字符串值或其他文字字符串。 - user357812$upload
参数,因此XSLT处理器会因此引发错误。您的代码非常误导和令人困惑。请不要再这样做了。始终提供完整的代码,以便其他人可以重现问题。 - Dimitre Novatchev