サイトマップ

Java XSLTでDOMSourceが使えない

遅ればせながらXSLTに夢中になってあれこれとやろうとしてみたりしているのですが、JavaのXSLT実装で腑に落ちないところがありました。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new FileInputStream(xsltFile));
DOMSource xsltSrc = new DOMSource(document);
Transformer transformer = tFactory.newTransformer(xsltSrc);

とかやればXSLTをDOMから読み込めそうですが、これはうまくいきません。たとえば、下のようなエラーが出ます。

ERROR:  '<ファイル名>: 変数またはパラメータ'link'が未定義です。'
FATAL ERROR:  'スタイルシートをコンパイルできませんでした'
javax.xml.transform.TransformerConfigurationException: スタイルシートをコンパイルできませんでした
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(Unknown Source)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(Unknown Source)
	at scrap.TransformerTest.transform(TransformerTest.java:45)
	at scrap.TransformerTest.main(TransformerTest.java:74)

困ったらソースに当たれということで、Apache Xalan-J 2.7.1のソースを取り寄せて調べてみましょう。ポイントはスタックトレースに出ているメソッドなので、

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImplクラス

    /**
     * javax.xml.transform.sax.TransformerFactory implementation.
     * Process the Source into a Templates object, which is a a compiled
     * representation of the source.
     *
     * @param source The input stylesheet - DOMSource not supported!!!
     * @return A Templates object that can be used to create Transformers.
     * @throws TransformerConfigurationException
     */
    public Templates newTemplates(Source source)
	throws TransformerConfigurationException 
    {
        :
    }

ああ、これはダメです。ものすごく明確にサポートしないよ!!!と書かれています。ということで、DOMSourceは使えないとすっぱりあきらめることができました。

 
research/1348800264.txt · 最終更新: 2012/09/28 11:55 by Kazuyuki Matsuda
特に明示されていない限り、本サイトの内容は次のライセンスに従います:Copyright(C) 2011 Shorindo, Inc. All Rights Reserved
Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki