作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 xsl 文件:“one.xsl”和“two.xsl”
one.xsl:
<xsl:function name="x:trans" as="xs:string">
<xsl:param name="str"></xsl:param>
<xsl:variable name="res1" select="x:translate_string($str)"/>
<xsl:sequence select="$res1"/>
</xsl:function>
</xsl:stylesheet>
我想在“one.xsl”中使用函数“x:trans”
如何将该函数引用到另一个文件?
<小时/>问题是,当我尝试以这种方式调用此函数时:
< xsl:value-of select="x:trans('Hello World')"/>
我从浏览器收到以下错误消息:
引用未声明的命名空间前缀:'x'
最佳答案
除了您需要 <xsl:include>
的正确回复之外或<xsl:import>
(我建议后者,因为前者通常会导致重复错误),您的其他问题如下:
函数名称必须属于命名空间。
命名空间必须在定义函数的同一文件中声明(定义并绑定(bind)到前缀)。
对函数的任何调用都必须以函数名称为前缀,并且该前缀必须绑定(bind)到函数名称所属的同一命名空间
这是一个简单的例子:
我。文件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>
二.文件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>
三. deleteB.xsl
中包含的转换应用于以下 XML 文档:
<t>1</t>
并产生正确的结果:
2
补充说明:目前没有浏览器支持 XSLT 2.0 转换 -- xsl:function
仅在 XSLT 2.0 + 中可用。
关于xslt - 如何在一个 xsl 中使用另一个 xsl 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541166/
我是一名优秀的程序员,十分优秀!