- - PR -
XSLTプロセッサ
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-11-05 13:36
以下の文でXSLT変換をさせた場合、どのプロセッサが使われるのでしょうか?
また、使用しているプロセッサを表示させる方法はありませんでしょうか? javax.xml.transform.TransformerFactory Factory = TransformerFactory.newInstance(); javax.xml.transform.Transformer transformer = Factory.newTransformer(new StreamSource(stylesheet)); transformer.transform(new StreamSource(sourceId), new StreamResult(strWrite)); Javaはsun jre1.4.2_08 xercessImpl.jarとxmlParserAPIs.jarを追加しています。 |
|
投稿日時: 2007-11-05 14:53
transformerがどのjarファイルからロードされるか?
ということでしょうか。 それなら http://blogs.wankuma.com/kacchan6/archive/2007/04/20/72159.aspx にJDK1.5ですがサンプルがあります。 勘違いなら、ごめんなさい。 |
|
投稿日時: 2007-11-05 15:50
本人降臨ですw。
TransformerFactory.newInstance();のJavadocを読むと、ルールが明記されています。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/xml/transform/TransformerFactory.html#newInstance() 手元のJDK6のコードを読むと、 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl のインスタンスを生成していますが、 SunのJDK1.4はCrimson/Xalan、JDK5以降はXerces/Xalanと記憶しています。 なので、Xalanが使われていると思います。 どのみち、JDK次第で変わるので、読み込まれるjarを確認するのが早いでしょう。 jarが特定できればManifestを参照すればバージョン等が分かるかと思います。 |
|
投稿日時: 2007-11-05 20:03
ありがとうございます。
現在 同じロジックを使って、違う環境のもとで 動作させています。 片方はメモリリークしてしまうので、XSLTプロセッサの違いではないかと睨んでいたところです。 皆様にご教示頂いたとおり やってみたところ Aの環境では、j2sdk1.4.2_02/jre/lib/rt.jar!/javax/xml/transform/TransformerFactor y.class Bの環境では xmlParserAPIs.jar!/javax/xml/transform/TransforerFactory.class というようになりました。 しかし、どのプロセッサが使われているか分かりません。 xmlParserAPIs.jarはXSLTプロセッサを持っていないと認識しています。 またXSLTプロセッサしてはsaxonとxalanが入っていると思われます。 これらを抜かして行けばいいのですが、事情により出来ないので、それぞれの環境でプロセッサとして何が使われているか特定したいと思っています。 何か勘違いしてる点、またプロセッサを知る良い方法がありましたらご教示願います。 [ メッセージ編集済み 編集者: ボブ 編集日時 2007-11-05 20:11 ] |
|
投稿日時: 2007-11-05 21:43
JDK1.4.2のソースを読むと
org.apache.xalan.processor.TransformerFactoryImplのインスタンスを作成しているようなので、xmlParserAPIs.jarのソースファイルを取得しようと思ったのですが、 xercesのプロジェクトを見てもxmlParserAPIs.jarのソースが手に入りませんでした。 どこにあるかご存知ありませんでしょうか? |
|
投稿日時: 2007-11-05 23:06
ファクトリではなく、ファクトリによって生成されたインスタンスの方を見てみましょう。
|
|
投稿日時: 2007-11-06 09:32
ご教示の通りインスタンスを見たところ、
環境Aでは com.icl.saxon.TransformerFactoryImpl 環境Bでは org.apache.xalan.processor.TransformerFactoryImpl となっていました。 saxonとxalanですね。 xalanを使うとリークしてしまうのでしょうか。。 もう少し調査を進めてみます。 ありがとうございました。 |
1