XSLT中三级+函数的范围

时间:2014-06-16 19:39:47

标签: xslt scope xslt-2.0

A.xsl包括B.xsl包括C.xsl,其中包含函数x:test()的定义。 x:test()中的模板范围A.xsl是否超出范围?如果A.xsl调用x:test()会怎样?

1 个答案:

答案 0 :(得分:1)

您可以在c.xsl中定义函数x:text(),并在b.xsl和a.xsl中包含或导入。 我写了一个例子来证明这一点:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.test.com/functions">
<xsl:output indent="yes" method="text" encoding="UTF-8" omit-xml-declaration="yes"/>
<!--c.xsl-->
<xsl:function name="x:text">
               <xsl:param name="string"/> <xsl:value-of select="$string"/>
</xsl:function>
</xsl:stylesheet>

<xsl:stylesheet>
  <xsl:include href="c.xsl"/>
  <xsl:output indent="yes" method="text" encoding="UTF-8" omit-xml-declaration="yes"/>
<!--b.xsl-->
  <xsl:variable name="myFunc" select="x:text('b')"/>
</xsl:stylesheet>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.test.com/functions">
 <xsl:output indent="yes" method="text" encoding="UTF-8" omit-xml-declaration="yes"/>
 <xsl:include href="b.xsl"/>
 <!--a.xsl-->
<xsl:template match="/">
 x:text()  was called in b.xsl:   <xsl:value-of select="$myFunc"/>; 
 x:text()  is called in a.xsl:  <xsl:value-of select="x:text('a')"/>
 </xsl:template>
</xsl:stylesheet>