Árvore de páginas

 

Índice

 

Objetivo.

El objetivo de esta guía es demostrar la técnica estándar para la manipulación de archivos xml dentro de los scripts personalizados del Fluig. 

En este ejemplo cargaremos un xml externo al Fluig vía java y haremos la lectura y la manipulación del mesmo vía javascript.

De esta manera queda más fácil tratar el XML y realizar integraciones.

 

 

El xml que se importará

El xml que estaremos cargado es una representación del catálogo de cds.

<CATALOG>
 <CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Hide your heart</TITLE>
  <ARTIST>Bonnie Tyler</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
</CATALOG>


Esta es apenas parte del contenido del archivo xml que se consumirá en este ejemplo. Note que este posee tres capas:

  1. La primera está representada por la tag <catalog> y representa la colección entera de cds. 
  2. En el segundo nivel tenemos la tag <CD> que representa un CD de todo el catálogo. 
  3. Las otras tags internas a tag <CD> representan los datos del CD y forman la tercera capa de este ejemplo. 

La comprensión de esa estructuración se hace necesaria para entender el ejemplo como en su conjunto.

Para verificar el contenido completo del xml haga clic en este link.

 

 

Cargando el contenido del xml para una variable javascript.

El próximo paso es cargar el contenido de ese xml para una variable javascript . Para eso haremos la carga de algunos objetos java para que consigamos cargar el xml (funciones del paquete java.net.URL).

Cargando documento
var url = new java.net.URL("http://www.w3schools.com/xml/cd_catalog.xml");
var connection = url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "text/plain");
if (connection.getResponseCode() != 200) {
	throw "Failed : HTTP error code : " + connection.getResponseCode();
}
var br = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream()));

El código anterior cargará a la variable br el contenido del xml desde la dirección www.w3schools.com/xml/cd_catalog.xml . Note que existen tratamientos para situaciones donde no fue posible cargar el documento (getResponseCode() != 200) . Preste atención a esos tratamientos para devolver un mensaje de error amigable al usuario, dependiendo del momento y lugar donde esta técnica se utiliza. Antes de que lo enviemos al parser javascript tendremos que hacer algunos tratamientos y este será nuestro próximo paso.

 

 

Eliminando informaciones innecesarias para el parser xml javascript

Antes de que lo enviemos al parser será necesario eliminar algunas tags o informaciones que no son aceptadas por el parser xml del javascript. A seguir tenemos una demostración del bloque que elimina esos ítems en nuestro xml de ejemplo.

Cargando documento
var result = "";
while ((output = br.readLine()) != null) {
	// Eliminando encabezamientos y comentarios iniciales del xml ejemplo
	if (output.indexOf("<?") > -1 || output.indexOf("<!") > -1) {
		continue;
	}
	result += output;
}

Con el código anterior terminamos de eliminar líneas que comienzan con "<?" y "<!" que no son aceptadas por el parser xml y que no hacen parte de la estructura relevante de datos del xml.

En este caso, por coincidencia, estaremos eliminando las dos primeras líneas del archivo xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Edited by XMLSpy --> 

 

En este ejemplo tuvimos esos dos elementos que se eliminaron para que el xml fuese aceptado por el parser xml. Pero en algunos xml algunos elementos se deberán tratar antes de ser sometidos al parser.


Atención especial a documentos xml que contengan la tag <class>.

En casos como este se deberá realizar un tratamiento eliminando estas propiedades para que sea posible convertir el xml de la respuesta de la url en un documento xml javascript válido.

 

Observación

Ícono

Tags con nombre "class" no podrán tener propiedades internas definidas en la propia tag de apertura .

Ej: <class size="10">.

 


Realizando la conversión de String para documento xml javascript.

Después de la remoción y tratamiento de "impurezas" de la string xml llegamos al punto más crítico que es la transformación o parsing de la string xml para un documento javascript xml .

El código para esa transformación es muy simple y podrá ser visto en el bloque a seguir

Realizando el Parsing del xml para variable javascript
var doc = new XML(result);

 

En esta parte descubriremos si el xml pasado al javascript es válido como documento xml y si el mismo está apto para consulta y manipulación. En caso negativo se generará un mensaje de error en el log del jboss del Fluig y se interrumpirá la ejecución del evento en cuestión.

Observación

Ícono

En el caso que la ejecución del evento Fluig haya sido interrumpida antes de generar los resultados esperados, verifique el log del Jboss Fluig para posibles errores de parser del xml enviado.

 


Manipulando el documento xml

Ahora tenemos la variable doc cargada con el xml partir del primer nivel, es decir. La variable doc representa la tag <catalog> de la string xml del documento que se envió. Para que veamos la cantidad de cds que tenemos en el catálogo simplemente usemos el siguiente comando : doc.CD.length() .

Recordando que el caso de las letras deberá seguir el mismo existente dentro del xml. En este ejemplo nosotros tomamos la cantidad de ocurrencias existente dentro de la colección CD existente dentro del objeto Doc (que representa <catalog>. En el bloque a seguir tenemos ejemplos de consulta, creación y eliminación de campos dentro de todos los registros de CD existentes en el documento xml.

Manipulando xml
 log.info("Se encontraron " + doc.CD.length() + " discos en el XML");
 // Haciendo la lectura de todos los CDs que vinieron al xml
 for (y in doc.CD) {
	// Exhibiendo una propiedad de uno de los ítems del xml
	log.info("Nombre del disco: " + doc.CD[y].TITLE);
	// ingresando nuevo campo que contendrá el valor del campo price convertido al precio en real
	doc.CD[y].VALORBRL = "R$ " + (doc.CD[y].PRICE * 2);
	// Eliminando campo Year del xml 
	delete doc.CD[y].YEAR;
}

 

Después de la ejecución de esta lógica "for" la variable doc ya contendrá el xml modificado y podrá ser utilizada para cualesquiera fines necesarios, entre ellos el reenvío a una aplicación externa al Fluig.

Observación

Ícono

Recuerde que manipulación de xml es case-sensitive con la denominación original del documento xml.

Informaciones

Icon

Adjunto a este artículo tenemos esta misma lógica descrita en este archivo implementada como evento de formulario. Recordando que esta misma lógica también se podrá implementar como evento de proceso o un dataset.

Download: displayFields.js

 

 

 

 

 

  • Sem rótulos