2

xsl:message の出力を既存のアプリケーションにキャプチャする機能を追加したいと考えています。トランスフォーマーに messageListener を追加するための簡単な参照が見つかりましたが、私のアプリはテンプレート オブジェクトを生成する saxTransformerFactory.newTemplates() で構成されており、これを使用して xmlfilter "XMLFilter xmlFilter = saxTransformerFactory.newXMLFilter(templates);" を作成します。「MessageListener を実装する」クラスを追加するにはどうすればよいですか?

4

2 に答える 2

1

TransformerFactory および関連するクラスは、XSLT プロセッサを呼び出すための製品に依存しない API (JAXP または Trax と呼ばれることもあります) です。MessageListener は、Saxon 製品に固有のものです。MessageListener は、JAXP Transformer の Saxon 実装である Saxon の Controller オブジェクトに登録できます。JAXP Transformer がある場合は、Transformer を Saxon Controller にキャストしてから、setMessageListener を呼び出す必要があります。XMLFilter を Saxon で使用すると、XMLFilter は net.sf.saxon.Filter のインスタンスになります。これには、Controller を返す getTransformer() メソッドがあります。

于 2013-04-26T18:33:55.853 に答える
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... );
}
于 2017-03-22T22:28:46.907 に答える