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

发布于 2024-11-02 23:37:44 字数 1074 浏览 5 评论 0原文

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

尽管确切的上下文可能不太相关(并且可能太令人困惑),但我将在下面提供它。 我有一个链式转换,如下所示:

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

    xsl:函数名称=“my:f”
         xsl:sequence select=".. xpath .."   
    xsl:函数
    
  2. 对于步骤 2,步骤 1 (output.xml) 的结果是,一个新的转换器 (transform2.xsl),它将使用其他一些 XML 输入(例如 input2.xml)。

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

现在我知道可以通过创建一个包含我的 xsl:function 的单独文件,然后使用 xsl:import 来包含来自两个转换的该文件 (transform.xmltransform2.xml)。

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

预先感谢,

M.

First, I should say that I am a beginner in terms of XSLT.

Although the exact context may not be so relevant (and might be too confusing), I will provide it below.
I have a chained transformation, which looks like this:

  1. Input.xml is the input file for this transformation, which is performed using transform.xsl. The result of this transformation is output.xml. transform.xml contains a classic custom xsl:function:

    xsl:function name="my:f"
         xsl:sequence select=".. xpath .."   
    xsl:function
    
  2. The result from step 1 (output.xml) is, for step 2, a new transformer (transform2.xsl), which will be using some other XML input (let's say input2.xml).

What I would like to do is to copy the xsl:function node entirely (present in the transform.xsl in step 1) to the output.xml, so that it can be used in step 2.
No updates / changes are needed in this case for the xsl:function while copying it (just a simple node copy).
Note that I do not want to copy the xsl:function only when a given input element (from input.xml) is present. But rather, I want to copy it always, no matter what the input.xml is.

Now I know this can be made by having a separate file which contains my xsl:function, and then using xsl:import to include this file from both transformations (transform.xml and transform2.xml).

But I would like to know if there are other ways of accomplishing this (..without having a separate file where the function is declared / defined)?

Thanks in advance,

M.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

后知后觉 2024-11-09 23:37:44

您可以使用 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 是定义函数的命名空间。

You can access the stylesheet document using document('') so doing e.g.

<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>

should copy any xsl:function elements in the stylesheet to the result tree.

[edit]
After the edit it seems you want to copy a function of a certain name: if you want to copy the function of certain name then you could do e.g.

<xsl:copy-of select="document('')/xsl:stylesheet/xsl:function[
        resolve-QName(@name, .) eq QName('http://example.com/ns', 'f')]"/>

where f is the local name of the function and http://example.com/ns is the namespace the function is defined in.

楠木可依 2024-11-09 23:37:44

您可以使用 document() 内置函数,它将返回空 URI 的样式表文档。然后您只需将元素复制到输出即可。

You can use the document() built-in function which wil return the stylesheet document for an emtpy URI. Then you can just copy the element to the output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文