0

我正在使用 Java 中的 XSL 模板,并且我正在尝试构建一个自定义标记,该标记将调用一些 Java 代码,然后将结果放入模板中。我使用 XOM 作为我的 XML 引擎。我对 XOM 和 XSL 都很陌生,所以我什至不确定这是否是一个聪明的主意。

我想做的一个非常简单的例子是这个,其中my_ns是一个带有“custom_tag”的自定义命名空间,该方法custom tag

<xsl:template name="foo">
 <my_ns:custom_tag />
</xsl:template>

public Node custom_tag() {
  return Node("<a/>");
}

#result of calling the template foo
<a/>

我愿意接受有关从 XSL 模板调用 Java 的替代方法的建议。

4

1 回答 1

3

这更多的是关于您的 XSLT 处理器是否可以从模板中执行/调用 java 代码而不是您的 XML 引擎/解析器/api 的问题。Java 的默认 XSLT 处理器是来自 Apache Software Foundation 的 Xalan-C 或 Xalan-J(不记得是哪个)。我确实相信它们都允许扩展函数在方法内执行 java 代码。在使用 xalan-j 扩展函数之前,我已经在 XSL 样式表中完成了 JDBC sql 查询。我还记得读过 Saxon XSLT 处理器也允许此功能。您将搜索您的 XSLT 处理器以获取实现此功能的细节。

关于这是否是一个好主意的问题实际上取决于问题。尽管我使用了上面提到的 SQL 扩展函数并且在那种情况下它符合要求,但后来我觉得它真的很脏。我之所以这么说是因为当您添加特定于供应商的扩展功能时,您会失去 XSLT 处理器之间的可移植性。

您的示例显示您只是在输出中创建一个新节点,如果是这种情况,我认为没有必要让 java 执行此操作,因为这是 XSLT 的主要功能之一:创建节点。我怀疑你的真正问题比简单地创建一个节点更复杂,所以我建议你可能想要考虑在 java 中完成所有工作以获得你正在寻找的结果,或者在 java 中做一些工作并传递一个参数(使用 xsl:param 元素的名称/值对)到您的 XSL 样式表运行时。

以下是一些帮助您入门的快速网站:

于 2010-12-20T05:15:49.200 回答