除此之外,你需要<xsl:include>
或<xsl:import>
正確的回覆(我推薦後者,因爲前者往往造成重複錯誤),你的其他問題如下:
函數名稱必須屬於名稱空間。
命名空間必須在定義該函數的同一個文件中聲明爲(定義並綁定到前綴)。
任何調用該函數具有的前綴函數的名稱和該前綴必須綁定到相同的命名空間到該函數名所屬
下面是一個簡單的例子:
I.文件deleteA.xsl
定義函數my:double
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my"
>
<xsl:function name="my:double" as="xs:double">
<xsl:param name="pArg" as="xs:double"/>
<xsl:sequence select="2*$pArg"/>
</xsl:function>
</xsl:stylesheet>
II。文件deleteB.xsl
進口文件deleteA.xsl
和使用功能my:double
:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my">
<xsl:import href="deleteA.xsl"/>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select="my:double(.)"/>
</xsl:template>
</xsl:stylesheet>
III。中包含的deleteB.xsl
變換上下面的XML文檔施加:
<t>1</t>
和正確的結果產生:
2
附加評論:目前沒有瀏覽器支持XSLT 2.0轉換 - xsl:function
僅在XSLT 2.0 +中可用。
如果您已導入或包含「one.xsl」,那麼如果要使用它,還需要在「two.xsl」中聲明「x」命名空間。 – 2010-08-22 12:19:38
另外,您提到來自* browser * ...自定義**函數的消息是XSLT 2.0功能**。目前沒有瀏覽器支持XSLT 2.0。如果你想讓瀏覽器執行你的XSLT,你需要一個* XSLT 1.0 *解決方案。 – 2010-08-22 12:24:15
好問題(+1)。查看我的答案,獲取如何調用'xsl:function'的詳細說明。 – 2010-08-22 14:34:52