来自libxml2 / libxslt / lxml的Stack usage error
是什么原因?
答案 0 :(得分:1)
您似乎正在使用lxml
扩展功能。在这种情况下,"堆栈使用错误" (XPATH_STACK_ERROR
内部)当从XPath堆栈中弹出一个值并且堆栈为空时发生。典型情况是使用比预期更少的参数调用扩展函数。
答案 1 :(得分:0)
根据@nwellnhof's answer,这源于扩展函数已注册并调用的参数少于预期的事实。
在我的情况下,这是因为我传入了一个节点的内容,在某些情况下,该节点是空的。以前这很好,但我的工具链中的某些内容已经改变并开始引发此错误。
我原来的代码看起来像是:
<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>