libxml2/libxslt/lxml Stack usage error
的原因是什么?
您似乎正在使用lxml
扩展函数。在这种情况下,当值从 XPath 堆栈中弹出并且堆栈为空时,会发生"堆栈使用错误"(XPATH_STACK_ERROR
内部错误)。典型方案是调用的扩展函数,其参数少于预期。
根据@nwellnhof的回答,这源于这样一个事实,即扩展函数已被注册并调用的参数比预期的要少。
就我而言,这是因为我传入了一个节点的内容,在某些情况下该节点是空的。以前这很好,但是我的工具链中的某些内容发生了变化并开始引发此错误。
我的原始代码看起来像这样:
<xsl:template match="foo">
<xsl:value-of select="my:func(.)" />
</xsl:template>
当foo
为空时,会引发"堆栈使用错误",通常与"未注册函数"错误分组。简单的解决方法是仅在foo
中有内容时才匹配,例如:
<xsl:template match="foo[./*]">
<xsl:value-of select="my:func(.)" />
</xsl:template>