将元素(xsl:function)从样式表复制到“result”XML

时间:2011-04-25 15:04:03

标签: xslt copy xls

首先,我应该说我是XSLT的初学者。

虽然确切的背景可能不那么相关(并且可能太混乱),但我将在下面提供。 我有一个链式转换,看起来像这样:

  1. Input.xml是此转换的输入文件,使用transform.xsl执行。这种转变的结果是output.xmltransform.xml包含经典自定义xsl:function

    xsl:function name="my:f"
         xsl:sequence select=".. xpath .."   
    xsl:function
    
  2. 对于步骤2,步骤1(output.xml)的结果是一个新的变换器(transform2.xsl),它将使用其他一些XML输入(假设input2.xml })。

  3. 我想要做的是将xsl:function 节点完全复制(在步骤1中的transform.xsl中)复制到output.xml,以便它可以在第2步中使用。 在这种情况下,xsl:function复制时不需要更新/更改(只是一个简单的节点副本)。 请注意,仅当存在给定的输入元素(来自xsl:function)时,我才想复制input.xml。但是,无论input.xml是什么,我都想复制它。

    现在我知道这可以通过包含我的xsl:function的单独文件,然后使用xsl:import来包含来自两个转换(transform.xml和{{1}的此文件来实现})。

    但是我想知道是否还有其他方法可以实现这一点(...没有单独的文件来声明/定义函数)?

    提前致谢,

    微米。

2 个答案:

答案 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。然后你可以将元素复制到输出中。