Java (oracle xdk) で XML ドキュメントをパラメータとして XSL 変換に渡す方法は?
-
18-09-2019 - |
質問
XML ドキュメントを XSLT スタイルシートにパラメータとして渡そうとしています。コードは変換に oracle XDK を使用していると思います (JDK 1.4.2 と Spring を使用していますが、私はコードベースを初めて使用するため、最終的に何がロードされるのかわかりません)。最初の試みでは、ドキュメント オブジェクトを作成し、これをトランスフォーマーのパラメーターとして設定しましたが、変数をツリーにコピーしようとしても結果は得られませんでした。頭に浮かぶ疑問は次のとおりです。
XSLT トランスフォーマーの一般的な場合でもこれは可能ですか?(一般的に XSLT 変数/パラメータにはノードセットを含めることができるため、そうあるべきだと思われます)
特にoracle XDK(またはクラスパスにあるxalan)で可能ですか?
もしそうなら、どうすればそれを機能させることができますか?
解決
答えはしかし、それは、少なくとものOracle XSLプロセッサ用、非直観的で、これが可能であるということです。私は(名前は無実を保護するために変更)、次の(非稼働)の呼び出しを試してみました。
Document x = createDocumentForMe();
transformer.addParameter("param",x);
と
Document x = createDocumentForMe();
transformer.addParameter("param",new DOMSource(x));
(それはDOMにjava.xml.transformインターフェースだったので多分DOMSourceが働くだろう基づいてこの第二)。最後に私のために働いたの呼び出しは、XSLはXPathを使用し、変数の有効なタイプは、基本的に文字列やnodesetsであり、XPathがnodesetsを返すという洞察を取ることでした。私にとっては、次の作品ます:
Document x = createDocumentForMe();
XPathExpression xpe = XPathFactory.newInstance().newXPath().compile("/");
transformer.addParameter("param",xpe.evaluate(x, XPathConstants.NODESET));
どの基本的にDOMオブジェクトに渡されたの唯一のルート文書を含むノードセットを取得するためにXPathを使用しています。しかし、これはハックのビットのように思えるし、他のXSLプロセッサで動作しない場合がありますので、YMMV ...