Jump to content

Como ler em PHP dados em XML


silvamouro
 Share

Recommended Posts

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.
Link to comment
Share on other 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.

Link to comment
Share on other 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...

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other 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?

Link to comment
Share on other 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);
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.