Ergebnisse serialisieren
Nachdem Ihre Anwendung einen XPath- oder XQuery-Ausdruck ausgewertet oder eine Transformation mit einem XSLT-Style-Sheet durchgeführt hat, möchten Sie vielleicht, dass die Ausgaben als XML-Dokument in Form einer Datei oder einer Java™-Zeichenfolge geschrieben werden. Der Prozess der Bereitstellung von Ergebnissen als XML-Dokument wird als Serialisierung bezeichnet.
Vorgehensweise
- XSequenceCursor serialisieren
Ihre Anwendung kann die Methode XSequenceCursor.exportSequence aufrufen, um eine Sequenz zu serialisieren, die durch eine Instanz des Interface XSequenceCursor repräsentiert wird. Die Argumente dieser Methode sind eine Instanz des Interface javax.xml.transform.Result und optional eine Instanz des Interface XOutputParameters.
Wenn die Instanz des Result-Interface gleichzeitig eine Instanz der Klasse javax.xml.transform.stream.StreamResult ist, wird die Sequenz wie im Artikel XSLT 2.0 and XQuery 1.0 Serialization Recommendation beschrieben serialisiert. Das StreamResult-Objekt kann eine Instanz der Klasse java.io.Writer oder der Klasse java.io.OutputStream enthalten, in die der Prozessor die serialisierte Sequenz schreibt.
Sie können eine Instanz des Interface XOutputParameters erstellen, indem Sie XFactory.newOutputParameters() aufrufen und dann die Methoden für dieses Objekt aufrufen, um die Standardparametereinstellungen für die Serialisierung außer Kraft zu setzen.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) { // Einrückung für ein übersichtliches Ausgabeergebnis definieren XOutputParameters params = factory.newOutputParameters(); params.setIndent(true); exprResult.exportSequence(new StreamResult(System.out), params); } else { System.out.println("None found"); }
Sie können auch eine der getOutputParameters()-Methoden für eine Instanz des Interface XSLTExecutable aufrufen, um die Serialisierungsparameter abzurufen, die einer bestimmten Ausgabedefinition in einem XSLT-Style-Sheet zugeordnet sind. Verwenden Sie die Methode XSLTExecutable.getOutputParameters(javax.xml.namespace.QName), um die Serialisierungsparameter für eine benannte Ausgabedefinition abzurufen, oder die Methode XSLTExecutable.getOutputParameters() ohne Argumente, um die Parameter einer nicht benannten Ausgabedefinition abzurufen. Diesen Schritt könnten Sie ausführen, wenn Sie das Ergebnis der Transformation mit der von der Transformation erzeugten Instanz des Interface XSequenceCursor nachbearbeiten möchten, bevor das Ergebnis serialisiert wird. Wenn Sie die Einstellungen der Serialisierungsparameter in der von einer der XSLTExecutable.getOutputParameters()-Methoden zurückgegebenen Instanz des Interface XOutputParameters ändern, wirkt sich diese Änderung nicht auf die Ausgabedefinition im Style-Sheet aus.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);
Wie Sie dem Artikel XSLT 2.0 and XQuery 1.0 Serialization Recommendation entnehmen können, tritt ein Serialisierungsfehler auf, wenn die zu serialisierende Sequenz Attributknoten oder Namespaceknoten enthält. Falls Ihre zu serialisierende Sequenz Attribut- oder Namespaceknoten enthalten könnte, rufen Sie die Werte dieser Knoten als String-Werte oder Werte mit einem anderen geeigneten Datentyp ab und serialisieren Sie dann stattdessen diese Werte.
- Einzelnes Element serialisieren
Sie haben die Möglichkeit, nur das aktuelle Element einer Instanz des Interface XSequenceCursor zu serialisieren. Verwenden Sie dazu eine der exportItem-Methoden. Die exportItem-Methoden sind vom Interface XItemView geerbte Methoden und können daher auch für eine Instanz dieses Interface aufgerufen werden.
Die Argumente der Methode exportItem sind, wie oben für die Methode exportSequence beschrieben, eine Instanz des Interface javax.xml.transform.Result und optional eine Instanz des Interface XOutputParameters. Ein Aufruf von exportItem hat denselben Effekt wie ein Aufruf von exportSequence mit einer Sequenz, die nur aus dem aktuellen Element besteht.
- Ergebnis einer Transformation oder Abfrage direkt serialisieren Ihre Anwendung kann das Ergebnis einer XSLT-Transformation oder eines XQuery-Ausdrucks auch direkt serialisieren, indem Sie eine Instanz des Interface javax.xml.transform.Result für die Methode XSLTExecutable.execute oder XQueryExecutable.execute bereitstellt. Die Einstellungen der Serialisierungsparameter werden im Falle eines XSLT-Style-Sheets durch die Attribute einer anwendbaren Deklaration xsl:output oder Anweisung xsl:result-document bestimmt. Im Falle des Ergebnisses eines XQuery-Ausdrucks werden immer die Standardwerte verwendet.
XFactory factory = XFactory.newInstance(); XSLTExecutable style = factory.prepareXSLT(new StreamSource("style.xsl")); style.execute(new StreamSource("purchase.xml"), new StreamResult("output.xml"));
Falls Ihre Anwendung für eine Transformation eine Instanz des Interface XResultResolver bereitstellt, kann die Anwendung jede abschließende Ergebnisstruktur an einen anderen Bestimmungsort senden.
- Identitätstransformation
Mit der API XML können Sie XML-Dateien aus einer Instanz von javax.xml.transform.Source direkt in Daten einer Instanz von javax.xml.transform.Result transformieren. Dieser Prozess wird häufig als Identitätstransformation bezeichnet. Ein Beispiel finden Sie im Artikel XSLT-Basisoperationen ausführen.


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