Orbeon XBL 和 xxbl:transform

问题描述

我仍处于理解和学习使用 XBL 组件的早期阶段。我正在尝试使用样式表在主实例中的节点内容生成 HTML“报告”(暂时搁置该节点更改时更新它的问题)。我可以让样式表运行并生成没有任何值的 HTML,但我仍在尝试了解如何将数据获取到样式表中。我查看了“XForm SandBox”示例“xbl-xslt.xhtml”,它确实在我的应用程序中运行。该示例在自定义标记内使用 xform 重复,并且样式表中有一个模板,该模板具有引用自定义标记的匹配项,因此我假设样式表就是这样获取其数据的。

我不希望它生成任何 XForm 标记,只生成 HTML。在 XBL 绑定中,我使用 xxbl:mode="binding" 作为属性。我只想在自定义标记上放置一个 ref 属性,但我不知道如何将数据传递到样式表。 (目前在我的样式表中,所有内容都在 <xsl:template match="/"> 元素下。) 我注意到“备用表”示例有这个:

<xsl:template match="@*|node()">
    <xsl:copy>
         <xsl:if test="/*">
              <xsl:attribute name="xxbl:scope">outer</xsl:attribute>
         </xsl:if>
         <xsl:apply-templates select="@*[not(name() = ('style1','style2'))]|node()"/>
    </xsl:copy>
</xsl:template>

还有这个:

<xsl:template match="foo:table-alternate">
  <xh:table>
      <xsl:apply-templates select="@*|node()"/>
  </xh:table>
</xsl:template>

我想这是这项工作的关键,但我怎么能简单地在我的 xbl 的自定义标签添加一个 ref 属性并让这项工作?我一直在浏览 Orbeon 文档、“沙箱”示例和其他地方,但我可能仍然误解了 XBL 组件的一些基本原则。有人能指出我正确的方向吗?

解决方法

您是说要将绑定到您的组件的节点中的数据传递给 XSLT 吗?如果是这样,那是不可能的,这也不是 XSLT 与 XBL 结合使用的方式。

将 XBL 中的 XSLT 视为其他一些语言中的宏,作为 meta-programming 的一种形式,它允许您在“表单编译时”运行代码,并且该代码能够生成 XForms 和 HTML。由于它在“编译时”运行,因此数据尚不可用。主要语言仍然是 XForms,在大多数情况下,您不需要在 XBL 组件中使用 XSLT。