Serialización de resultados
Una vez la aplicación ha evaluado una expresión XPath o XQuery o tras realizar una transformación con una hoja de estilo XSLT, quizás desee grabar la salida como un documento XML real representado en forma de archivo o una serie Java™. El proceso de la representación de resultados como documento XML se conoce como serialización.
Procedimiento
- Serializar un XSequenceCursor.
Su aplicación puede llamar al método XSequenceCursor.exportSequence para serializar una secuencia que se representa mediante una instancia de la interfaz XSequenceCursor. Los argumentos de este método son una instancia de la interfaz javax.xml.transform.Result y opcionalmente una instancia de la interfaz XOutputParameters.
Si la instancia de la interfaz Result también es una instancia de la clase javax.xml.transform.stream.StreamResult, la secuencia se serializa tal como se describe en la Recomendación de serialización XSLT 2.0 y XQuery 1.0. El objeto StreamResult puede contener una instancia de la clase java.io.Writer o de la clase java.io.OutputStream, en que el proceso grabará la secuencia serializada.
Puede crear una instancia de la interfaz XOutputParameters llamando a XFactory.newOutputParameters() y puede llamar a los métodos de ese objeto para sustituir los valores de los parámetros de serialización predeterminados.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"); }
También puede llamar a uno de los métodos getOutputParameters() en una instancias de la interfaz XSLTExecutable para obtener los parámetros de serialización que están asociados a una definición de salida en particular de una hoja de estilo XSLT. Utilice el método XSLTExecutable.getOutputParameters(javax.xml.namespace.QName) para obtener los parámetros de serialización de una definición de salida con nombre o el método XSLTExecutable.getOutputParameters() sin argumento para obtener los de la definición de salida sin nombre. Tal vez desee hacerlo para procesar posteriormente el resultado de la transformación utilizando la instancia de la interfaz XSequenceCursor que genera la transformación antes de serializar el resultado. Si cambia los valores de los parámetros de serialización en la instancia de la interfaz XOutputParameters que ha devuelto uno de los métodos XSLTExecutable.getOutputParameters(), no afectará a la definición de salida de la hoja de estilo.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);
Observe que según la Recomendación de serialización XSLT 2.0 y XQuery 1.0, se genera un error de serialización si la secuencia que se ha de serializar contiene nodos de atributo o nodos de espacios de nombres. Si la secuencia que debe serializar puede contener nodos de atributo o de espacios de nombres, obtenga los valores de esos nodos como series o algún otro tipo adecuado y, en su lugar, serialice los valores.
- Serializar un elemento simple.
También puede serializar solamente el elemento actual de una instancia de la interfaz XSequenceCursor utilizando uno de los métodos de exportItem. Los métodos exportItem se heredan de la interfaz XItemView, por lo que también se invocarán en una instancia de esa interfaz.
Al igual que con el método exportSequence descrito anteriormente, los argumentos del método exportItem son una instancia de la interfaz javax.xml.transform.Result y, de forma opcional, una instancia de la interfaz XOutputParameters. El efecto de invocar a exportItem es idéntico al efecto de invocar a exportSequence con una secuencia que consta solamente del elemento actual.
- Serializar el resultado de una transformación o consulta directamente. Su aplicación también puede serializar el resultado de una transformación XSLT o de una expresión XQuery directamente suministrando una instancia de la interfaz javax.xml.transform.Result en el método XSLTExecutable.execute o en el método XQueryExecutable.execute. Los valores de los parámetros de serialización vienen determinados por los atributos de una declaración xsl:output aplicable o de una instrucción xsl:result-document en el caso de una hoja de estilo XSLT y siempre son los valores predeterminados en el caso del resultado de una expresión XQuery.
XFactory factory = XFactory.newInstance(); XSLTExecutable style = factory.prepareXSLT(new StreamSource("style.xsl")); style.execute(new StreamSource("purchase.xml"), new StreamResult("output.xml"));
Si su aplicación proporciona una instancia de la interfaz XResultResolver en una transformación, la aplicación puede dirigir cada árbol de resultados final a un destino distinto.
- Utilizar la transformación de identidades.
Puede utilizar la API XML para transformar datos XML que se encuentran en una instancia de javax.xml.transform.Source directamente en una instancia de javax.xml.transform.Result. A menudo, se hace referencia a esta acción como transformación de identidades. Consulte Cómo llevar a cabo operaciones básicas de XSLT para obtener un ejemplo.


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