Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Índice
maxLevel4
outlinetrue
stylenone
exclude.*ndice

 

Objetivo

O objetivo deste guia é demonstrar a técnica padrão para manipulação de arquivos xml dentro dos scripts customizados do Fluig.

Neste exemplo carregaremos um xml externo ao Fluig via java e faremos a leitura e manipulação do mesmo via javascript.

 

 

O xml que será importado

O xml que estaremos carregado é uma representação de catálogo de cds.

Bloco de código
languagexml
<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 é apenas parte do conteúdo do arquivo xml que será consumido neste exemplo. Note que ele possui três camadas:

  1. A primeira é representada pela tag <catalog> e representa a coleção inteira de cds. 
  2. No segundo nível temos a tag <CD> que representa um CD de todo o catálogo. 
  3. As outras tags internas a

...

  1. tag

...

  1. <CD> representam os dados do CD e formam a terceira camada deste exemplo. 

A compreensão dessa estruturação se faz necessária para entender o exemplo como um todo.

Para verificar o conteúdo completo do xml clique neste link.

 

 

Carregando o conteúdo do xml para uma variável javascript.

...

O código acima ir carregar para variável br o conteúdo do xml provindo do endereço www.w3schools.com/xml/cd_catalog.xml . Note que existem tratamentos para situações aonde onde não foi possivel possível carregar o documento (getResponseCode() != 200) . Atente-se a esses tratamentos para retornar uma mensagem de erro amigável para o usuário dependo do momento e local aonde esta técnica é utilizada . Antes de mandarmos para o parser javascript teremos que fazer alguns tratamentos e este será o nosso próximo passo.

 

 

Removendo informações desnecessárias para o parser xml javascript

...

Antes de enviarmos para o parser será necessário remover algumas tags ou informações que não são aceitas pelo parser xml do javascript. Abaixo temos uma demonstração do bloco que remove esses itens em nosso xml de exemplo.

...

Com o código acima acabamos de remover linhas que começam com "<?" e "<!" que não são aceitas pelo parser xml e que não fazem parte da estrutura relevante de dados do xml.

Neste caso, por coincidência, estaremos removendo as duas primeira linhas do arquivo xml: 

Bloco de código
languagexml
<?xml version="1.0" encoding="UTF-8"?>

...

 
<!-- Edited by XMLSpy --> 

 

Neste exemplo tivemos esses dois elementos que foram removidos para que o xml fosse aceito pelo parser xml. Mas em alguns xml alguns elementos deverão ser tratados antes de serem submetidos ao parser.


Atenção especial a documentos xml que contenham a tag <class>.

Essa tag não poderá ter propriedades instanciadas internamente. Ex: <class size="10"> . Em casos como este deverá ser feito um tratamento removendo essas propriedades para que seja possível converter o xml da resposta da url em um documento xml javascript válido.

...

Nota
titleObservação

Tags com nome "class" não poderão ter propriedades internas definidas na própria tag de abertura .

Ex: <class size="10">

...

.

 


Realizando a conversão de String para documento

...

xml javascript.

...

Após a remoção e tratamento de "impurezas" da string xml chegamos ao ponto mais crítico que é a transformação ou parsing da string xml para um documento javascript xml .

...

Bloco de código
languagejava
titleRealizando o Parsing do xml para variável javascript
firstline0
linenumberstrue
var doc = new XML(result);

 

Nesta parte iremos descobrir se o xml passado para o javascript é válido como documento xml e se o mesmo está apto para consulta e manitpulaçãomanipulação. Em caso negativo será gerada uma mensagem de erro no log do jboss do Fluig e a execução do evento em questão será abortada.

...

Manipulando o documento xml

...

Agora temos a varível doc carregada com o xml  partir do primeiro nível ou seja. A variável doc representa a tag <catalog> da string xml do documento que foi enviado. Para vermos a quantidade de cds que temos no catálogo basta usarmos o seguinte comando : doc doc.CD.length() .

Lembrado que o caso das letras deverá seguir o mesmo existente dentro do xml  . Neste exemplo nós pegamos a quantidade de ocorrências existente dentro da coleção CD existente dentro do objeto Doc (que representa <catalog>. No bloco abaixo temos exemplos de consulta, criação e eliminação de campos dentro de todos os registros de CD existentes  no no documento xml.

 

 

Bloco de código
languagejava
titleManipulando xml
firstline0
linenumberstrue
 log.info("Foram encontrados " + doc.CD.length() + " discos no XML");
 // Fazendo a leitura de todos os CDs que vieram no xml
 for (y in doc.CD) {
	// Exibindo uma propriedade de um dos itens do xml
	log.info("Nome do disco: " + doc.CD[y].TITLE);
	// inserindo novo campo que conterá o valor do campo price convertido para o preco em real
	doc.CD[y].VALORBRL = "R$ " + (doc.CD[y].PRICE * 2);

	// Removendo campo Year do xml 
	delete doc.CD[y].YEAR;
}

 

Após a execução desta lógica "for" a variável doc já conterá o xml alterado e poderá ser utilizada para quaisquer fins necessários, entre eles o reenvio para uma aplicação externa ao Fluig.

Nota
titleObservação

Lembre-se que manipulação de xml é Case case-sensitive com a denominação original do documento xml.

Informações
titleInformações

Em anexo a este artigo temos esta mesma lógica descrita neste arquivo implementada como evento de formulário . Lembrando que esta mesma lógica também poderá ser implementada como evento de processo ou um dataset.

Download: displayFields.js