2013-04-26 32 views
2

我想添加一個功能來捕獲xsl:消息輸出到現有的應用程序。找到簡單的參考將messageListener添加到轉換器,但我的應用程序由一個saxTransformerFactory.newTemplates()生成一個模板對象,然後用於創建一個xmlfilter,「XMLFilter xmlFilter = saxTransformerFactory.newXMLFilter(templates);」。如何在我的類中實現「實現MessageListener」?我可以將messageListener添加到xslt模板對象嗎?

回答

1

TransformerFactory和相關類是用於調用XSLT處理器的與產品無關的API(稱爲JAXP,或者有時稱爲Trax)。 MessageListener特定於Saxon產品。您可以使用Saxon的Controller對象註冊MessageListener,該對象是JAXP Transformer的Saxon實現。如果您有JAXP Transformer,則需要將Transformer轉換爲Saxon控制器,然後調用setMessageListener。在Saxon中使用XMLFilter時,XMLFilter將成爲net.sf.saxon.Filter的一個實例。這有一個getTransformer()方法,它返回Controller。

+0

其實我XMLFilter是不會出現有getTranformer org.xml.sax.XMLFilter的一個實例()方法。我想我必須活着而不會捕獲xsl:消息! – user2324378 2013-04-30 09:19:17

+0

org.xml.sax.XMLFilter是一個接口,所以實現這個接口的任何東西都將屬於一個具體的類。 – 2013-05-01 07:40:05

1

正如邁克爾·凱解釋,但隨後在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...); 
} 
相關問題