Java + XSL,从模板中调用Java代码

时间:2010-12-20 03:59:37

标签: java xslt xom

我正在使用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的其他方法的建议。

1 个答案:

答案 0 :(得分: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样式表。

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