Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wilker

API DOM - Parte 2

Recommended Posts

API DOM - Parte 1

 

 

e ae galera, voltando aki com a 2 parte do tutorial de DOM

 

nessa parte eu vou mostrar como adicionar atributos aos nos, e a leitura do XML, eu sei q eu disse a leitura ia ficar para a 3 parte... mas eu tinha esquecido que antes de editar e deletar, você tem q saber ler primeiro :P

 

para quem nao viu a 1 parte, eu recomendo que veja, pois vamos dar continuidade a ela: API DOM - Parte 1

 

primeiro vamos dizer, que na nossa agenda, nos queremos que seja adicionado a data de aniversario do contato, mas, para mudar um pouco, no lugar de criar um nó para isso, vamos colocar isso num atributo do nó contato, para isso, vamos mudar a criacao do XML um pouco:

 

$dom = new DOMDocument("1.0", "ISO-8859-1"); //versao 1.0 com encoding ISO-8859-1	$dom->preserveWhiteSpace = false; //descartar espacos em branco	$dom->formatOutput = true; //gerar um codigo bem legivel		$root = $dom->createElement("agenda"); //cria o 1 no, todos os nos vao ser inseridos nesse		$contato = $dom->createElement("contato"); //cria um contato	$nome = $dom->createElement("nome", "Wilker Lucio da Silva"); //cria o nome	$telefone = $dom->createElement("telefone", "(0xx88) 3333-3333"); //cria telefone	$endereco = $dom->createElement("endereco", "Av. blablabla n 999"); //cria endereco		//aqui esta a adicao	$contato->setAttribute("aniversario", "05/09");	//termina aqui		$contato->appendChild($nome); //adicionar o nome ao contato	$contato->appendChild($telefone); //adicionar o telefone	$contato->appendChild($endereco); //adicioanr endereco		$root->appendChild($contato); //adiciona esse contato	$dom->appendChild($root); //adiciona o root ao documento		$dom->save("contatos.xml"); //salvar arquivo		header("Content-Type: text/xml");	echo $dom->saveXML(); //imprimir conteudo na tela
como podemos ver, a adicao foi simples, apenas 1 comando, eu adicionei o atributo

 

agora nos precisamos popular um pouco + esse XML, seria um trabalho horrivel sair repetindo todos esses comandos para cada contato, entao vamos criar uma funcao para facilitar isso, vou colocar o arquivo final de criacao aqui:

 

criacaoDOM.php

function createContato($document, $nome, $telefone, $endereco, $aniversario) {		$contato = $document->createElement("contato"); //cria um contato		$nomeN = $document->createElement("nome", $nome); //cria o nome		$telefoneN = $document->createElement("telefone", $telefone); //cria telefone		$enderecoN = $document->createElement("endereco", $endereco); //cria endereco				$contato->setAttribute("aniversario", $aniversario);				$contato->appendChild($nomeN); //adicionar o nome ao contato		$contato->appendChild($telefoneN); //adicionar o telefone		$contato->appendChild($enderecoN); //adicioanr endereco				return $contato;	}		$dom = new DOMDocument("1.0", "ISO-8859-1"); //versao 1.0 com encoding ISO-8859-1	$dom->preserveWhiteSpace = false; //descartar espacos em branco	$dom->formatOutput = true; //gerar um codigo bem legivel		$root = $dom->createElement("agenda"); //cria o 1 no, todos os nos vao ser inseridos nesse		//criando os contatos	$contatoWilker = createContato($dom, "Wilker Lucio da Silva", "<span style=' color: green;'><span style=' color: green;'>(0xx88)</span> 3333-3333"</span>, "Av. blablabla n 999", "05/09");	$contatoJose = createContato($dom, "Jose da Silva", "<span style=' color: green;'><span style=' color: green;'>(0xx88)</span> 4444-4444"</span>, "Rua Fulano de Tal n 222", "10/12");	$contatoMaria = createContato($dom, "Maria da Silva", "<span style=' color: green;'><span style=' color: green;'>(0xx88)</span> 5555-5555"</span>, "Rua Beltrano n 333", "20/01");		//adicionando no root	$root->appendChild($contatoWilker);	$root->appendChild($contatoJose);	$root->appendChild($contatoMaria);		$dom->appendChild($root);	$dom->save("contatos.xml"); //salvar arquivo		header("Content-Type: text/xml");	echo $dom->saveXML(); //imprimir conteudo na tela
agora temos um XML com 3 elementos, ja da pra comeca a brinca de ler o XML, mas antes, vou postar como deve estar o XML agora:

 

<?xml version="1.0" encoding="ISO-8859-1"?><agenda>  <contato aniversario="05/09">	<nome>Wilker Lucio da Silva</nome>	<telefone>(0xx88) 3333-3333</telefone>	<endereco>Av. blablabla n 999</endereco>  </contato>  <contato aniversario="10/12">	<nome>Jose da Silva</nome>	<telefone>(0xx88) 4444-4444</telefone>	<endereco>Rua Fulano de Tal n 222</endereco>  </contato>  <contato aniversario="20/01">	<nome>Maria da Silva</nome>	<telefone>(0xx88) 5555-5555</telefone>	<endereco>Rua Beltrano n 333</endereco>  </contato></agenda>
certo, vamo agora ler todos os contatos do XML, e exibir os dados em tabela:

 

$dom = new DOMDocument("1.0", "ISO-8859-1");	$dom->preserveWhiteSpace = false;		$dom->load("contatos.xml"); //carregar nosso arquivo XML previamente criado		$contatos = $dom->getElementsByTagName("contato"); //pegar todos os nos de nome contato		//agora faremos o loop com os contatos	foreach($contatos as $cont) {		echo "<table>";				$aniversario = $cont->getAttribute("aniversario"); //pega o valor do atributo aniversario		$childs = $cont->childNodes; //pega todos os nos filhos do contato				foreach($childs as $c) {			eval("\$" . $c->nodeName . " = \"" . $c->nodeValue . "\";"); //passa os atributos em variaveis		}				echo "<tr><td><b>Nome:</b></td><td>{$nome}</td></tr>";		echo "<tr><td><b>Telefone:</b></td><td>{$telefone}</td></tr>";		echo "<tr><td><b>Endereco:</b></td><td>{$endereco}</td></tr>";		echo "<tr><td><b>Aniversario:</b></td><td>{$aniversario}</td></tr>";				echo "</table><br>";	}
bom, agora vamos explicar o codigo

 

o metodo getElementsByTagName, retorna todos os nos de nome contato, com isso nos fizemos um foreach, para ir passando pelos elementos de contato, dentro desse loop, para pegar o valor de um atributo, nos usamos o metodo getAttribute, q foi tao simples que nem tem oq explicar, depois, nos pegamos os nos internos do nó contato (que em nosso caso sao: nome, telefone e endereco), acho q alguns nao vao entender como funciona o eval()

 

o eval() eh uma funcao que executa uma string como c fosse codigo PHP, ou seja, se dessemos echo no lugar de eval, apareceria isso para cada eval():

 

$nome = "Wilker Lucio da Silva";

 

esse foi um exemplo, pois o nome veio do nodeName, e o Wilker do nodeValue (nome e valor do no)

 

apos pegar todas as variaveis do contato, foi soh montar a tabela e exibir :)

 

aqui termina a parte 2, espero que ja esteja claro a leitura do XML, qq duvida poste aqui mesmo q eu respondo com o maior prazer ^^

 

 

 

API DOM - Parte 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

VALEU Wilker, eu ia tirar uma dúvida aqui, mas você ja me respondeu na outra pergunta.Quebro um galhão irmão, valeu memo, se num sabe como eu tava quebrando a cabeça pra tentar resolucionar o problema dos acentos.Abração e fica com DeusDilux

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wilker, estou precisando muito de ajuda, ocorreu o seguinte problema: http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

 

eu usei o script que você ensinou para interpretar o xml, estava funcionando certinho no meu computador, mas quando eu passei pro servidor deu este erro:

 

" Fatal error: Cannot instantiate non-existent class: domdocument in /usr/local/www/www.visualconnect.com.br/teste/not2.php on line 2 "e a linha 2 se refere a

 

" $dom = new DOMDocument("1.0", "ISO-8859-1"); "

o qual será a solução para este problema?

 

Aguardo uma ajuda http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Valeu.

Dilux

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Wilker, sou eu de novo, o problema agora é o seguinte;

Foi instalado o PHP 5.0.4 no servidor que eu estou usando e está dando um erro assim

 

Fatal error: Class 'DOMDocument' not found in /usr/local/www/www.visualconnect.com.br/not1.php on line 4

 

O que poderia ser? http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

 

Me da um Help, valeu http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

Obrigado

 

 

 

Dilux

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao sei oq pode ser kra.. por padrao ele devia vir ativado... da um phpinfo() e v c o DOM ta mesmo funcionando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu dei uma olhada, parece não estar ativado mesmo, http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

como faço para ativar, procurei por DOM no php.ini e não encontrei, será que tem alguma maneira.

A configuração no apache pode comprometer o funcionamento do DOM?

 

Se tiver alguma resposta. http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Valeu. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wilker...Parabéns pelos tutoriais (procuro algo em português ou inglês na WEB há 3 dias e não achei nada tão claro - e olha que eu sou professor!! ehehe).Preciso de uma ajudinha:Tenho um XML que meu cliente forneceu e nele, apesar de estruturado, tenho, por exemplo, a tag <NOME> em duas seções diferentes, tipo<PRODUTOS> <PRODUTO> <NOME>kasjdlksjd</NOME> <FABR> <NOME>Zé Mané</NOME> <ENDERECO>jdlkaj dlksajdksaj</ENDERECO> </FABR> </PRODUTO> Preciso navegar e filtrar este XML (que não posso alterar) e pegar uma hora o nome do produto e em outra parte do programa, o nome do fabricante.Se você puder me dar um help, agradeço muitíssimo[]Kalili

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!Wilker, legal mesmo esse post, mas estou precisando de uma maozinha...Estou usando PHP Version 5.1.6 Copiei o seu codigo, mudei o nome das variaveis e quando fui executar apareceu o seguinte erro:Warning: DOMDocument::save() [function.DOMDocument-save]: output conversion failed due to conv error, bytes 0xF3 0x64 0x69 0x67 in D:\Apache2.2\htdocs\st\admin\gerar.php on line 180Arquivo: PRINCIPAL.XMLEntao fiz varios testes e funcionou quando tirei o "ISO-8859-1", mas os acentos ficam desconfigurados.Ou seja, se uso ISO-8859-1 nao funciona, se tiro funciona...O codigo é esse aqui:$oNovo = new DOMDocument("1.0", "ISO-8859-1");$oNovo->preserveWhiteSpace = false;$oNovo ->formatOutput = true;$oGrid = $oNovo->createElement("GRID");$oRegistro = $oNovo->createElement("REGISTRO");$oTitulo = $oNovo->createElement("TITULO","Descrição");$oRegistro->setAttribute("ID", "$Id_Registro");$oRegistro->appendChild($oTitulo);$oGrid->appendChild($oRegistro);$oNovo->appendChild($oGrid);$oNovo->save("PRINCIPAL.XML");Talvez ja tenha acontecido o mesmo com voce...Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala ae pessoal, beleza??

 

Pra quem usa PHP4, eu criei uma classe adapter para disponiblizar a interface do PHP5 no DOM do PHP4.

Ela já determina a versão do PHP que você está usando e cria a instância correta.

 

Só uma observação: você precisa ter a extensão DOM XML do PHP 4 instalada :)

 

http://download.dnfeitosa.com/php/domadapt...06-10-13.tar.gz

 

Abraços!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

gostaria de saber se por exemplo eu fosse fazer uma leitura de XML

e com os dados lidos gravar um novo XML, eu precisaria limpar o objeto dom

ou alguma coisa assim, reiniciar limpar para que os dados dos lidos geram

um novo XML, com outros nos e tals...

 

att

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.