Estudo de XML – Parte 2

“http://www.w3.org/TR/html4/loose.dtd”>
<!– .meuCode { font:”Courier New”, Courier, mono; font-size: 11px; color:#3333CC; }</p> <p>–>

E daeh galerinha!

Estamos aeh novamente para dar continuidade na coluna sobre XML.
Hoje iremos abordar alguns métodos de manipulação de nós XML dentro do Flash.
Como iremos trabalhar com nós XML, iremos utilizar também a classe XMLNode, que simboliza cada item (nó) dentro de um objeto da classe XML.
Os tópicos a serem abordados serão os seguintes:

  • Iniciando um novo documento XML ;
  • Criando nós (XMLNodes)
    • XML.createElement ;
    • XML.createTextNode ;
  • XMLNode.attributes ;
  • XMLNode.appendChild ;
  • XMLNode.removeNode ;
  • XMLNode.insertBefore ;
  • XMLNode.toString() ;
  • XMLNode.cloneNode ;
  • XML.contentType ;
  • XML.docTypeDecl ;

Esta classe possui outros métodos e propriedades, mas nós já vimos na coluna passada.

Para acessar a coluna anterior, clique aqui.

Iniciando um novo documento XML
Para iniciarmos, vamos relembrar como iniciar um documento XML no Flash. A sintaxe é a seguinte:

var doc:XML = new XML();

A partir deste documento, criaremos nossos elementos filhos para depois associarmos ao documento principal (doc).

Criando nós ( XMLNodes )
Até o presente momento, nosso documento está vazio. É necessário que criemos elementos para podermos associar a este documento. Somente objetos instanciados a partir da classe XML podem criar elementos filhos. Como vimos na coluna passada, o Flash suporta somente dois tipos de nós: do tipo ELEMENT e TEXT NODE.
Para criarmos nós do tipo ELEMENT, usamos o método createElement da classe XML. Sua sintaxe é a seguinte (iremos utilizar a var doc criada anteriormente como documento principal):

var principal:XMLNode = doc.createElement("conta");
trace(principal);// irá mostrar <conta />

Acima, criamos um objeto da classe XMLNode do tipo ELEMENT. O parâmetro conta passado na chamada do método, é nome desejado para o novo nó criado. Ele ainda não está associado ao documento principal (doc). Mais adiante iremos ver como associá-lo. Para criar um nó do tipo TEXT NODE, utilize a sintaxe abaixo:

var texto_principal:XMLNode = doc.createTextNode("Este texto vai dentro de conta");
trace(texto_principal); // irá mostrar Este texto vai dentro de conta

Nós do tipo TEXT NODE são somente texto para serem colocados dentro de outros elementos dentro de um documento XML.
Os métodos createElement e createTextNode são construtores da classe XMLNode, ou seja, para criar um novo objeto da classe XMLNode, utilize as sintaxes mostradas acima.

XMLNode.attributes
Como vimos na coluna anterior, é uma matriz associativa dos atributos do nó XML que estamos trabalhando. Por exemplo, para adicionarmos os atributos nome e senha ao elemento definido na variavel de nome principal, sendo o nome do nó XML conta, usamos a sintaxe a seguir:

principal.attributes.nome = "hugo";principal.attributes.senha = "teste";trace(principal); // irá mostrar <conta senha="teste" nome="hugo" />

XMLNode.appendChild ( elemento:XMLNode ) : Void
Com essa sintaxe, colocamos um elemento dentro do outro, ou seja, dizemos que o elemento passado como parâmetro deve estar dentro do elemento que está chamando a função. Por exemplo, vamo colocar o elemento de texto criado anteriormente dentro do elemento principal.

principal.appendChild (texto_principal);
trace(principal);
// irá mostrar <conta senha="teste" nome="hugo">Este texto vai dentro de conta</conta>

Agora conta deixa de ser um objeto vazio para conter o elemento TEXT NODE definido na variavel texto_principal.

XMLNode.removeNode () : Void
Este método é utilizado para remover nós. No exemplo acima, nós adicionamos o nó de texto dentro do nó conta. Para removermos este nó de texto, usamos a seguinte sintaxe:

texto_principal.removeNode();

Ou seja, chamamos o método removeNode a partir do nó que desejamos remover.

XMLNode.insertBefore ( objAserInserido:XMLNode, antesDoNó:XMLNode ) : Void
Insere um nó XML antes do nó passado como parâmetro em antesDoNó. Exemplo:

var doc2:XML = new XML(); // cria um novo documento XML

var login:XMLNode = doc2.createElement("login"); // cria um elemento chamado login
var usuario:XMLNode = doc2.createElement("usuario"); // cria um elemento chamado usuario
var senha:XMLNode = doc2.createElement("senha"); // cria um elemento chamado senha 

login.appendChild(usuario); // coloca usuário dentro de login
login.appendChild(senha); // coloca senha dentro de login

trace(login);
// irá mostrar <login><usuario /><senha /></login>
var intrometido:XMLNode = doc2.createElement("intrometido"); // criamos um intrometido
login.insertBefore(intrometido, senha); // inserimos o intrometido antes de senha
trace(login); // irá mostrar <login><usuario /><intrometido /><senha /></login>

XMLNode.toString() : String
Converte um objeto XMLNode ou XML para uma string e retorna o seu valor.
Exemplo (utilizando o exemplo anterior como base):

var stringResult:String = login.toString();
trace (stringResult); // irá mostrar <login><usuario /><intrometido /><senha /></login>

trace(typeof stringResult); // irá mostrar string
trace(typeof doc2); // irá mostrar object

XMLNode. cloneNode ( recursivo : Boolean ) : XMLNode
Copia o nó que está chamado a função e retorna uma cópia do mesmo, e não uma referência, ou seja, o objeto retornado após a chamada desta função não tem nenhum vínculo com o objeto original. O parâmetro recursivo indica se você deseja copiar todos os nós filhos do nó original. Se for true, ele irá copiar todos os nós filhos (se existirem), do contrário, copiará somente o nó que está chamando a função.
Exemplo (utilizando o exemplo anterior como base):

var comFilhos:XMLNode = login.cloneNode (true);
var semFilhos:XMLNode = login.cloneNode (false); 

trace(comFilhos); // irá mostrar <login><usuario /><intrometido /><senha /></login>
trace(semFilhos); // irá mostrar <login />

XML.contentType : String
Indica o tipo de conteúdo MIME do document XML. Valor padrão é

application/x-www-form-urlencoded, que é o mesmo utilizado como padrão para a maioria dos formulários HTML. Ele será utilizado quando você chamar as funções XML.send ou XML.sendAndLoad.
Exemplo:

var doc:XML = new XML();
trace(doc.contentType); // irá mostrar application/x-www-form-urlencoded
doc.contentType = "text/xml"; trace(doc.contentType); // irá mostrar text/xml

XML.docTypeDecl : String
Indica a declaração DOCTYPE do documento XML. Se o documento não possuir, você poderá defini-lo a partir desta propriedade, indicando uma string como parâmetro. O Flash não faz a validação DTD.
Exemplo:

var doc:XML = new XML();
trace(doc.docTypeDecl); // não irá mostrar nada, pois a declaração não foi definida
doc.docTypeDecl = "<!DOCTYPE greeting SYSTEM \"hello.dtd\">"; trace(doc.docTypeDecl); //irá mostrar <!DOCTYPE greeting SYSTEM "hello.dtd">

Bom galera por hoje é só. Abaixo tem um exemplo de login e senha, onde ele pesquisa em um arquivo XML gerado dentro do próprio Flash.

O arquivo AS está assim:

var doc:XML = new XML();
var contas:XMLNode = doc.createElement("contas");
var conta1:XMLNode = doc.createElement("conta");
// definindo parametros para a primeira conta
conta1.attributes.nome = "Hugo Ferreira da Silva";
conta1.attributes.usuario = "hugo";
conta1.attributes.senha = "teste";

// definindo parametros para a segunda conta
var conta2:XMLNode = conta1.cloneNode(false);
conta2.attributes.nome = "Danilo Santana";
conta2.attributes.usuario = "danilo";
conta2.attributes.senha = "santana";

// definindo parametros para a terceira conta
var conta3:XMLNode = conta1.cloneNode(false);
conta3.attributes.nome = "Visitante";
conta3.attributes.usuario = "guest";
conta3.attributes.senha = "guest";

// colocando as contas 1, 2 e 3 dentro do nó contas
contas.appendChild(conta1);
contas.appendChild(conta2);
contas.appendChild(conta3);

// colocando tudo dentro de doc
doc.appendChild( contas );

login.onRelease = function () {
	var passou = false;
	var f:XMLNode = doc.firstChild.firstChild;
	for(var node:XMLNode=f; node != null; node=node.nextSibling) {
		if(node.attributes.usuario == usuario.text
			&& node.attributes.senha == senha.text) {
			passou = true;
			break;

		}
		trace(node);
	}
	if(passou == true) {
		getURL("javascript:alert('Seja bem vindo " +
			node.attributes.nome+"!');void(0);");
	} else {
		getURL("javascript:alert('Usuário ou senha incorreta');void(0);");
	}
}

@braços galerinha e fiquem com Deus!

Escrito por hugo on abril 16, 2005. Arquivado em Flash. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

2 respostas a Estudo de XML – Parte 2

  1. Amigo, estou muito grato pela aula de xml parte 1 e 2, mas gostaria da 3 parte nao consegui encontrar. Vlw.

  2. boa tarde!

    o artigo é muito bom mas não consigo criar da erro na linha var contas:XMLNode = doc.createElement(“contas”); isto no Flash Builder 4

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>