首先,我应该说我是XSLT的初学者。
虽然确切的背景可能不那么相关(并且可能太混乱),但我将在下面提供。 我有一个链式转换,看起来像这样:
Input.xml
是此转换的输入文件,使用transform.xsl
执行。这种转变的结果是output.xml
。 transform.xml
包含经典自定义xsl:function
:
xsl:function name="my:f"
xsl:sequence select=".. xpath .."
xsl:function
对于步骤2,步骤1(output.xml
)的结果是一个新的变换器(transform2.xsl
),它将使用其他一些XML输入(假设input2.xml
})。
我想要做的是将xsl:function
节点完全复制(在步骤1中的transform.xsl
中)复制到output.xml
,以便它可以在第2步中使用。
在这种情况下,xsl:function
复制时不需要更新/更改(只是一个简单的节点副本)。
请注意,仅当存在给定的输入元素(来自xsl:function
)时,我才想复制input.xml
。但是,无论input.xml
是什么,我都想复制它。
现在我知道这可以通过包含我的xsl:function
的单独文件,然后使用xsl:import
来包含来自两个转换(transform.xml
和{{1}的此文件来实现})。
但是我想知道是否还有其他方法可以实现这一点(...没有单独的文件来声明/定义函数)?
提前致谢,
微米。
答案 0 :(得分:1)
您可以使用document('')
访问样式表文档,例如。
<xsl:template match="/*">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:copy-of select="document('')/xsl:stylesheet/xsl:function"/>
<xsl:apply-templates/>
</xsl:stylesheet>
</xsl:template>
应将样式表中的任何xsl:function
元素复制到结果树中。
<强> [编辑] 强> 在编辑之后,您似乎想要复制某个名称的功能:如果您要复制某个名称的功能,那么您可以执行以下操作:
<xsl:copy-of select="document('')/xsl:stylesheet/xsl:function[
resolve-QName(@name, .) eq QName('http://example.com/ns', 'f')]"/>
其中f
是函数的本地名称,http://example.com/ns
是函数定义的名称空间。
答案 1 :(得分:0)
您可以使用document()
内置函数将函数表文档返回给emtpy URI。然后你可以将元素复制到输出中。