• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

silvamouro

Como ler em PHP dados em XML

18 mensagens neste tópico

Como poderei passar para o PHP os dados que estao em XML?

Por emplo tenho isto:

<?xml version="1.0" encoding="UTF-8" ?>

- <Dados>

  <Nome>M101</Nome>

  <Idade>2796</Idade>

  </Dados>

Como consigo ir buscar estes dados ao XML?

Quem me pudesse ajudar agradecia imenso!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha dúvida é a mesma...

Como se procede para a partir de PHP ler os dados de um XML?

Quer dizer, através de um XML exportar para uma base de dados em MySQL e ler em PHP?

Alguém poderia dar umas luzes?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

olha le esse link k o Kimico meteu ai tens la um exemplo

if (file_exists('test.xml')) {
    $xml = simplexml_load_file('test.xml');

   echo "<pre>";
   print_r($xml);
   echo "<\pre>";
} else {
    exit('Failed to open test.xml.');
}

Isso devolve-te um array com os dados a partir dai podes fazer o que quiseres com os dados!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SimpleXML é muito bom para ler ficheiros XML rapidamente mas tem alguns problemas, ou pode gerar alguns. Nomeadamente o facto de que o que te é devolvido é um objecto especial, é um dos nós do XML mas é um recurso interno da libxml. Isso implica que não pode ser serializado, as conversões podem dar problemas e recomendo vivamente que faças conversão explicita dos valores.

Atenção que no exemplo que te colocaram é o "echo" que está a fazer uma conversão automática para string de todo o objecto mas isso nem sempre acontece.

//...
$xml = simplexml_load_file('test.xml');
strval($xml->Dados->Nome);
strval($xml->Dados->Idade);
//ou intval, floatval, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aconselho a validares com uma função tua o XML (ou com o DOMDocument) para que possas usar o SimpleXML (que é fácil de usar mas falha em muitos outros aspectos como lidar com ficheiros mal formatados).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aliás, se o ficheiro for pequeno utilizar o DOMDocument resolve quase todos os problemas que alguma vez encontrei com o SimpleXML. Esta última é bastante útil e simples de usar mas obriga a muitos cuidados se quiseres garantir que nada rebenta por causa dos dados do XML.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existem várias maneiras de ler ficheiros XML usando PHP. Usando a classe SimplXML tens uma forma simples e rápida de manipular ficheiros XML e os dados nele contidos, podes facilmente ler informação, acrescentar nós, enfim, manipular os dados do ficheiro. No entanto esta opção tem várias desvantagens, porque não é feita validação ao formato do XML e se este estiver inválido não é possível ler os dados, aquilo com que estás a trabalhar na verdade são recursos da libxml, não são objectos normais, o que implica alguns problemas em conversões e limitações no que podes fazer, apesar de parecerem objectos há situações onde não se comportam como tal. É mesmo assim uma boa maneira de ler, ganhas rapidez e facilidade de utilização mas perdes segurança.

DOMDocument permite, também, ler ficheiros XML, é mais seguro porque oferece um conjunto de métodos e código de validação, permite trabalhar com os dados com a interface DOM familiar, permite formatar o ficheiro, enfim, é uma forma mais completa de ler ficheiros XML mas é mais pesado a nível de memória e exige mais código para manipular os dados.

Outra forma ainda foi o que o yoda indicou, nunca usei essa classe mas parece ser uma boa opção.

Resumindo, deves escolher a opção que se adequar melhor ao teu caso. SimpleXML, DOMDocument o u até a classe SimpelHTMLDom que o yoda indicou.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem @Knitter, obrigado pela explicação e pelo tempo. Foi bastante esclarecedor.

Estava a utilizar SimpleXML. Mas o que eu realmente necessito é exportar o conteúdo de vários ficheiros em XML para uma base de dados em mysql (sem repetir os que já lá se encontram) e de seguida então ler em PHP.

A ideia é receber vários ficheiros XML com a informação de vários produtos e não repetir o conteúdo da exportação dos dados para a BD. E depois então ler em PHP.

Os produtos têm a referência como chave, estava a pensar controlar por aí... mas estou meio confuso como proceder.

A minha questão é cada vez que exportar os novos produtos verificar a referência para manter os antigos e não repetir...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se os ficheiros XML são controlados por ti então usar o SimpleXML é mais simples. A partir do momento em que tens o ficheiro carregado é percorrer o objecto com um foreach ou aceder directamente aos nós como se atributos de objectos fossem.

Verificar se já existem na BD é uma questão de fazer uma query antes de inserir e ver se a referência do produto já está na base de dados. Mas o melhor é começares pelo mais simples: ler o(s) ficheiro(s). Já consegues fazer isso? Ler os dados e mostrar o output no browser ou lá onde estás a usar isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, ler os dados consigo.

A questão é mesmo exportar os dados para a base de dados em MySQL que construi e fazer essa condição...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@AndreLC,

Se quiseres que não sejam repetidos os dados, usa a instrução IGNORE:

INSERT IGNORE INTO tabela VALUES (a,b,c);

Se quiseres em vez de ignorar, actualizar o registo :

INSERT INTO tabela (a, b, c) VALUES (va, vb, vc) ON DUPLICATE KEY UPDATE SET a = va, b = vb, c = vc, id=LAST_INSERT_ID(id);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado @yoda :D

Mas agora como exporto para MySQL o que vem do XML?

A questão já vem daqui, se quiseres ver

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não é exportar, é importar.

Basta fazeres em PHP um script para te importar a informação do XML como já foi indicado antes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu tinha importar depois mudei...

Todo baralhado já...

Mas a ideia está lá!  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora