2

我想添加一个功能来捕获 xsl:message 输出到现有应用程序。找到了将 messageListener 添加到转换器的简单参考,但我的应用程序包含一个 saxTransformerFactory.newTemplates() 生成一个模板对象,然后该对象用于创建一个 xmlfilter,“XMLFilter xmlFilter = saxTransformerFactory.newXMLFilter(templates);”。如何在“实现 MessageListener”的类中加入?

4

2 回答 2

1

TransformerFactory 和相关类是一个独立于产品的 API(称为 JAXP,有时称为 Trax),用于调用 XSLT 处理器。MessageListener 特定于 Saxon 产品。您可以使用 Saxon 的 Controller 对象注册 MessageListener,这是 JAXP Transformer 的 Saxon 实现。如果您有一个 JAXP Transformer,您需要将 Transformer 转换为 Saxon Controller,然后调用 setMessageListener。当您将 XMLFilter 与 Saxon 一起使用时,XMLFilter 将是 net.sf.saxon.Filter 的一个实例。这有一个 getTransformer() 方法,它返回控制器。

于 2013-04-26T18:33:55.853 回答
1

正如 Michael Kay 所解释的,但更多的是在 Java 代码中;-)

TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(xslt);
if (transformer instanceof TransformerImpl) {
   //saxon specific
   TransformerImpl timpl = (TransformerImpl) transformer;
   XsltTransformer saxonTransformer = timpl.getUnderlyingXsltTransformer();
   saxonTransformer.setMessageListener( ...your listener... );
}
于 2017-03-22T22:28:46.907 回答