gpt4 book ai didi

xslt - 如何在一个 xsl 中使用另一个 xsl 中的函数

转载 作者:行者123 更新时间:2023-12-02 11:42:01 25 4
gpt4 key购买 nike

我有两个 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> (我建议后者,因为前者通常会导致重复错误),您的其他问题如下:

  1. 函数名称必须属于命名空间

  2. 命名空间必须在定义函数的同一文件中声明(定义并绑定(bind)到前缀)。

  3. 对函数的任何调用都必须以函数名称为前缀,并且该前缀必须绑定(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com