2013-11-15 22 views

回答

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> 
1

看來你正在使用lxml擴展功能。在這種情況下,當從XPath堆棧彈出一個值並且堆棧爲空時,會發生「堆棧使用錯誤」(內部爲XPATH_STACK_ERROR)。典型的場景是一個擴展函數,它調用的參數比預期的要少。

+0

是的,我使用'lxml'。我最近升級了libxml2庫,並且一週前運行的代碼現在已經完全停止了處理這個單個錯誤,以前可能會引發其他錯誤。 –