Parsear e extrair a informação de um XML em PHP com DOMDocument

Explicamos a classe DOMDocument de PHP que serve para interpretar e parsear arquivos XML para extrair qualquer informação de seus nodos.

Por Sara Alvarez Langa - Tradução de Celeste Veiga


Publicado em: 07/4/11
Valorize este artigo:
Neste artigo vamos ver como mediante a função file_get_contents() obtemos o conteúdo de um arquivo .xml do que queremos extrair informação. Depois, para interpretar o XML utilizamos a classe DOMDocument, de programação orientada a objetos em PHP, que nos permite acessar os nodos do código XML por meio de uma estrutura de dados baseada em objetos. Com isso, poderemos finalmente mostrar em nossa página PHP qualquer conteúdo extraído do arquivo XML.

O primeiro que devemos deixar claro é que para poder realizar este exemplo vocês devem ter como mínimo, a primeira versão de PHP5, já que em PHP4 a classe DOMDocument não funciona.

Uma vez isto esclarecido, o exemplo é bastante simples de realizar. Partimos de um arquivo.xml no que temos uma lista de usuários com seu nome e a URL de sua página web e o primeiro que vamos fazer é obter o conteúdo do arquivo .xml em uma variável mediante a função file_get_contents().

$xml = file_get_contents("lista.xml");

Uma vez que tenhamos o conteúdo em nossa variável vamos instanciar a classe DOMDocument com a seguinte linha:

$DOM = new DOMDocument('1.0', 'utf-8');

Se vocês observarem verão que passei como parâmetro o formato e a codificação do XML obtida na variável $xml.

O que temos que fazer a seguir é ler o conteúdo da variável, mas sabendo que é um conteúdo XML, para isso utilizamos o procedimento loadXML que está dentro de DOMDocument

$DOM->loadXML($xml);

A continuação o que devemos fazer é separar cada registro de nosso XML, para tal realizamos a seguinte ação:

$usuarios = $DOM->getElementsByTagName('usuario');

Esta linha o que faz é criar um array com todos os registros que tenhamos com a etiqueta usuários em nosso XML.

Uma vez que tenhamos isto, só falta mostrá-lo em nossa página web PHP. Para isso, só temos que percorrer o array e ir criando nossa lista.

<?php
foreach($usuarios as $usuario) {
echo '<li><a href="'.$usuario->getElementsByTagName("url")->item(0)->nodeValue.'" target="_blank">'.utf8_decode($usuario->getElementsByTagName("nome")->item(0)->nodeValue).'</a></li>';
}
?>

Bom, estas linhas o que fazem é criar uma lista com o nome do usuário e um link para a sua web. Para isso, utilize a função getElementsByTagName() que obtém valor da etiqueta que você passa como parâmetro.

Para que fique mais claro deixo todo o código completo de nosso arquivo .php

<html>
<head>

</head>
<body>
Lista de alunos:
<?php
$xml = file_get_contents("lista.xml");
$DOM = new DOMDocument('1.0', 'utf-8');
$DOM->loadXML($xml);
$cursos = $DOM->getElementsByTagName('usuario');
?>
<ul>
<?php
foreach($usuarios as $usuario) {
echo '<li><a href="'.$usuario->getElementsByTagName("url")->item(0)->nodeValue.'" target="_blank">'.utf8_decode($usuario->getElementsByTagName("nome")->item(0)->nodeValue).'</a></li>';
}
?>
</ul>

</body>
</html>

Cabe destacar que a função file_get_contents()também pode obter o conteúdo de um arquivo remoto, só temos que passar a URL da seguinte forma:

$xml=file_get_contents("http://www.dominio.com/archivo.xml");

Nota: Queremos advertir sobre um possível problema que podemos encontrar com este script que é o fato de que nem todos os serviços de hosting permitem a leitura de arquivos remotos, ou seja, não permitem ler arquivos que não estejam em seu próprio servidor. Assim, antes de tentar fazê-lo vocês devem consultar o seu provedor de hosting para verificar se é permitido ou não. Isto será útil se necessitarmos ler o conteúdo de um arquivo .xml de outra web para colocar parte desse conteúdo na nossa.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato