Wilker 3 Denunciar post Postado Maio 29, 2005 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 telacomo 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 telaagora 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
Void : 0 Denunciar post Postado Maio 29, 2005 legal velho wilker, show mesmo ! Compartilhar este post Link para o post Compartilhar em outros sites
Dilux 0 Denunciar post Postado Julho 28, 2005 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
Dilux 0 Denunciar post Postado Agosto 8, 2005 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
Wilker 3 Denunciar post Postado Agosto 8, 2005 provavelmente eh a versao do PHP kra... verifica a versao q ta no server Compartilhar este post Link para o post Compartilhar em outros sites
Dilux 0 Denunciar post Postado Agosto 9, 2005 É verdade, era uma versão mais antiga, valeu.. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Dilux 0 Denunciar post Postado Setembro 12, 2005 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
Wilker 3 Denunciar post Postado Setembro 12, 2005 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
Dilux 0 Denunciar post Postado Setembro 15, 2005 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
Kalili 0 Denunciar post Postado Abril 21, 2006 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
Evantoni Fuchs 0 Denunciar post Postado Janeiro 30, 2007 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
dnfeitosa 0 Denunciar post Postado Fevereiro 11, 2007 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
tomelin 1 Denunciar post Postado Agosto 2, 2007 Como faço para apenas gravar no xml sem ter que ler todo o conteudo já existente no mesmo? Compartilhar este post Link para o post Compartilhar em outros sites
felipeduardo 0 Denunciar post Postado Agosto 24, 2009 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