XSLT 変換中にパラメーターを渡そうとしています。これがxslスタイルシートです。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="param1" select="'defaultval1'" />
<xsl:param name="param2" select="'defaultval2'" />
<xsl:template match="/">
<xslttest>
<tagg param1="{$param1}"><xsl:value-of select="$param2" /></tagg>
</xslttest>
</xsl:template>
</xsl:stylesheet>
以下はJavaコードです。
File xsltFile = new File("template.xsl");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document stylesheet = builder.parse("template.xsl");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer xsltTransformer = transformerFactory.newTransformer(new DOMSource(stylesheet));
//Transformer xsltTransformer = transformerFactory.newTransformer(new StreamSource(xsltFile));
xsltTransformer.setParameter("param1", "value1");
xsltTransformer.setParameter("param2", "value2");
StreamResult result = new StreamResult(System.out);
xsltTransformer.transform(new DOMSource(builder.newDocument()), result);
次のエラーが表示されます:- エラー: 「変数またはパラメーター 'param1' は未定義です。」致命的なエラー: 「スタイルシートをコンパイルできませんでした」
ただし、次の行を使用してトランスフォーマーを作成すると、すべて正常に動作します。
Transformer xsltTransformer = transformerFactory.newTransformer(new StreamSource(xsltFile));
Q1. Transformer の作成に DOMSource を使用する際の何が問題なのか知りたかっただけです。
Q2. これは、xml ドキュメントのプレースホルダーの値を置き換える理想的な方法の 1 つですか? プレースホルダーがソース xml ドキュメントにある場合、スタイル シートを使用して (およびパラメーターを渡す) それらを置き換える (簡単な) 方法はありますか?