用java来获取xsl消息

时间:2014-12-11 10:28:31

标签: java xslt saxon

我正在尝试使用JAXP在JTextArea中打印<xsl:message>。 我的问题是,我无法使用我的变换器创建一个saxonica控制器,我不知道为什么因为我在某些答案中使用了TransformerFactoryImpl。

这是我的Java代码:

public static void xslTransform(File xmlFile,File xslFile, JTextArea output){
StreamSource source = new StreamSource(xmlFile);
StreamResult result = new StreamResult(xslFile);
TransformerFactoryImpl tfimpl = new TransformerFactoryImpl();
Transformer transformer = tfimpl.newInstance().newTransformer(new StreamSource(xslFile));
Controller controller = new Controller(transformer);

导入控制器:

net.sf.saxon.Controller;

希望有人能帮助我。

荷风

1 个答案:

答案 0 :(得分:4)

Controller类中从未有过将JAXP Transformer作为参数的构造函数,我不知道你从哪里得到这个想法。

在Saxon 9.6之前的版本中,如果要调用Controller对象上的方法,可以将Transformer强制转换为Controller,即

Controller controller = (Controller)transformer;

在9.6中,Controller和Transformer之间的关系发生了变化,因为JAXP API越来越不适合利用XSLT 3.0中可用的工具。您现在可以将Transformer转换为net.sf.saxon.jaxp.TransformerImpl,并且可以从TransformerImpl调用getUnderlyingController()来转到Controller。

但你真的想这样做吗?另一种方法是做

factory.setAttribute(FeatureKeys.MESSAGE_EMITTER_CLASS, MyMessageEmitter.class)

其中MyMessageEmitter是您对Saxon的MessageEmitter接口的实现。