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

标签 java xslt xom

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

我想做的一个非常简单的例子是这样的,其中 my_ns 是一个带有“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 的替代方法的建议。

最佳答案

这更多的是关于您的 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 样式表。

这里有一些可以帮助您快速入门的网站:

关于Java+XSL,从模板内调用Java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486773/

相关文章:

java - 关于 String 实例化的最佳实践好奇心

java - Swing 上自定义组件的问题

java - 制作模块化 Java Web 应用程序的最佳方法是什么

xslt - 如何在 XSLT 中显示一个字符 n 次?

xml - 从xml文件中提取混合数据

XML 解析性能 DOM 与 XOM

java - XPath/getChildElements 都无法在 XOM 中获取 XML 子项

java - 如何为类的所有字段编写通用的自定义GSON反序列化器?

php - 获取 exsl :node-set to work in PHP

java - XOM 和 getChildElements