結果のシリアライズ
アプリケーションが XPath または XQuery 式を評価した後、 あるいは XSLT スタイルシートでの変換を実行した後で、その出力を、ファイルまたは Java™ ストリングで 表される実際の XML 文書として作成することが必要な場合があります。 XML 文書として結果をレンダリングするプロセスは、シリアライゼーションとして知られています。
手順
- XSequenceCursor をシリアライズします。
アプリケーションから XSequenceCursor.exportSequence メソッドを 呼び出して、XSequenceCursor インターフェースのインスタンスによって表されたシーケンスをシリアライズすることができます。 このメソッドの引数は、javax.xml.transform.Result インターフェースのインスタンス、 およびオプションで XOutputParameters インターフェースのインスタンスになります。
Result インターフェースのインスタンスが javax.xml.transform.stream.StreamResult クラスの インスタンスでもある場合、シーケンスは XSLT 2.0 and XQuery 1.0 Serialization Recommendation で説明されているようにシリアライズされます。StreamResult オブジェクトは、java.io.Writer クラス または java.io.OutputStream クラスのインスタンスを含むことができます。これにより、 プロセッサーはシリアライズされたシーケンスを書き込みます。
ユーザーは、XFactory.newOutputParameters() を呼び出して XOutputParameters インターフェースの インスタンスを作成し、そのオブジェクトに対してデフォルトのシリアライゼーション・パラメーター設定をオーバーライドするメソッドを 呼び出すことができます。XFactory factory = XFactory.newInstance(); XPathExecutable expr = factory.prepareXPath("/purchaseOrder/item[@price > 1000]"); XSequenceCursor exprResult = expr.execute(new StreamSource(inputFile)); System.out.println("Items purchased costing more than $1000"); if (exprResult != null) { // Set indenting in order to pretty-print result XOutputParameters params = factory.newOutputParameters(); params.setIndent(true); exprResult.exportSequence(new StreamResult(System.out), params); } else { System.out.println("None found"); }
さらに、XSLTExecutable インターフェースのインスタンスで getOutputParameters() メソッドの いずれかを呼び出して、XSLT スタイルシート内で特定の出力定義に 関連付けられたシリアライゼーション・パラメーターを入手することもできます。 名前付き出力定義のシリアライゼーション・パラメーターを取得するには、XSLTExecutable.getOutputParameters(javax.xml.namespace.QName) メソッドを使用し、名前のない出力定義のシリアライゼーション・パラメーターを取得するには、 引数なしの XSLTExecutable.getOutputParameters() メソッドを使用します。結果をシリアライズする前に、変換によって 生成される XSequenceCursor インターフェースのインスタンスを使用して、このメソッドが変換結果に対して何らかの後処理を実行するように することが必要な場合があります。XSLTExecutable.getOutputParameters() メソッドのいずれかによって 返される XOutputParameters インターフェースのインスタンス内のシリアライゼーション・パラメーター設定 を変更しても、スタイルシート内の出力定義には影響しません。XFactory factory = XFactory.newInstance(); XSLTExecutable style = factory.prepareXSLT(new StreamSource("style.xsl")); XSequenceCursor xformResult = style.execute(new StreamSource("purchase.xml"); XOutputParameters params = style.getOutputParameters(new QName("my-output-definition")); params.setMethod(XOutputParameters.METHOD_XHTML); xformResult.exportSequence(new StreamResult("output.html"), params);
XSLT 2.0 and XQuery 1.0 Serialization Recommendation によると、 シリアライズ対象のシーケンスに属性ノードまたは名前空間ノードが含まれる場合は、 シリアライゼーション・エラーとなることに注意してください。シリアライズする必要のあるシーケンスに属性 または名前空間ノードが含まれている可能性がある場合は、それらのノードの 値をストリング、あるいは別の適切な型として取得し、代わりにその型の値を シリアライズしてください。
- 単一項目をシリアライズします。
exportItem メソッドのいずれかを 使用して、XSequenceCursor インターフェースのインスタンスにある現在の項目のみを シリアライズすることもできます。exportItem メソッドは、XItemView インターフェースから 継承されているため、XItemView インターフェースのインスタンス上でも呼び出すことができます。
上記の exportSequence メソッドと同様に、exportItem メソッドの引数は、javax.xml.transform.Result インターフェースのインスタンス、およびオプションで XOutputParameters インターフェースのインスタンスになります。exportItem を呼び出す効果は、現在の項目のみで構成されたシーケンスを 使用して exportSequence を呼び出す効果と同じです。
- 変換または照会の結果を直接シリアライズします。 XSLTExecutable.execute メソッドまたは XQueryExecutable.execute メソッドで javax.xml.transform.Result インターフェースの インスタンスを指定することにより、アプリケーションから XSLT 変換または XQuery 式の結果を 直接シリアライズすることもできます。シリアライゼーション・パラメーターの設定値は、XSLT スタイルシートの 場合は、適用できる xsl:output 宣言または xsl:result-document 命令の属性によって 決定され、XQuery 式の結果の場合は、常にデフォルト値になります。
XFactory factory = XFactory.newInstance(); XSLTExecutable style = factory.prepareXSLT(new StreamSource("style.xsl")); style.execute(new StreamSource("purchase.xml"), new StreamResult("output.xml"));
アプリケーションが ある変換に対して XResultResolver インターフェースのインスタンスを指定すると、 そのアプリケーションは最終結果ツリーをそれぞれ別の宛先に送信できます。
- ID 変換を使用します。
XML API を使用すると、javax.xml.transform.Source のインスタンスに 入っている XML データを直接 javax.xml.transform.Result のインスタンスに変換できます。これは、多くの場合、ID 変換と呼ばれます。 例については、基本的な XSLT 操作の実行を参照してください。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_results_serial
ファイル名:txml_results_serial.html