我正在尝试使用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;
希望有人能帮助我。
荷风
答案 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接口的实现。