2011-09-30 71 views
0

我正在使用SaxonJ從Java執行XSLT轉換。將xsl:消息重定向到log4j

我的XSLT文件必須輸出任何調試/信息作爲輸出,因爲我的轉換邏輯很複雜。

有沒有辦法讓我可以重定向到log4j,以便我可以將轉換信息存儲在日誌文件中?

我的系統已經使用log4j將輸出記錄到文件。我想追加轉換調試消息。

任何想法?

回答

1

我很確定您已經找到了如何執行此操作。但我希望我的回答對其他人有用。

所有你需要做的就是實現MessageListener接口:http://www.saxonica.com/documentation/javadoc/net/sf/saxon/s9api/MessageListener.html

public class MessageListenerImpl implements MessageListener { 
    private static Logger logger = Logger.getLogger(MessageListenerImpl.class); 

    public void message(XdmNode content, boolean terminate, SourceLocator locator) { 
     if (terminate) { 
      logger.error(content.getStringValue()); 
      System.exit(1); 
     } else { 
      logger.warn(content.getStringValue()); 
     } 
    } 
} 
1

您可以配置您自己的信息發射器。有各種不同的接口要做到這一點,例如參見

http://www.saxonica.com/documentation/javadoc/net/sf/saxon/lib/FeatureKeys.html#MESSAGE_EMITTER_CLASS

或有在s9api XsltTransformer類簡單的接口。

+0

任何實例或MESSAGE_EMITTER_CLASS的使用環節。我無法在線找到用法/示例。 我相信這是你如何設置配置 - http://www.saxonica.com/documentation/javadoc/net/sf/saxon/Configuration.html#setMessageEmitterClass%28java.lang.String%29,但你如何實例化配置類? – nija

+0

表面下方總會有一個配置。例如,如果您使用JAXP,則可以從net.sf.saxon.TransformerFactoryImpl獲取它,或者如果您使用XQJ,則可以從SaxonXQDataSource獲取它。 –