SimpleXML - Trabalhando com XML e PHP - Parte 1/2

SimpleXML é mais uma das implementações feitas no PHP5 que quase ninguém conheçe, com ele é possível ler e editar arquivos XML de uma maneira muito simples.
Chega de blá blá blá vamos a um exemplo prático:

[code]
1 $arquivo = file_get_contents("http://maisregional.com.br/dolar.php");
2 $xml = simplexml_load_string($arquivo);
3
4 $dolar_compra = $xml->dolarcompra;
5 $dolar_venda = $xml->dolarvenda;
6
7 echo "Dolar Compra: R$ $dolar_compra
";
8 echo "Dolar Venda: R$ $dolar_venda";
[/code]

Aqui o XML gerado pelo Script php que fiz:
[code]

  • <?xml version="1.0" encoding="UTF-8"?>
  • <cotacao>
    • <dolarcompra>2,1252</dolarcompra>
    • <dolarvenda>2,1252</dolarvenda>
  • </cotacao>

[/code]

Vamos a explicação:
Linha 1: pego XML(fiz esse script para um cliente ele pega a cotação do dolar no site do banco central e cria um xml quem quiser usar sinta-se a vontade) e coloco todo o seu conteúdo na variável $arquivo
Linha 2: aqui começa a mágica, nesta linha o simplexml transforma o xml em objeto
Linha 4: coloca o valor da tag dolarcompra na variável $dolar_compra. Explicando melhor quando o XML é carregado no SimpleXML, seu apontador já é apontado para a linha na primeira tag do xml que no caso é cotacao, então seto $xml-> que vai apontar para o cotacao do XML, e depois seto dolarcompra seu valor é salvo na variavel

Viu como é simples?

Vamos a um exemplo mais complicado:

[code]
1 $arquivo = file_get_contents("http://www.xe.com/dfs/sample-usd.xml");
2 $xml = simplexml_load_string($arquivo);
3
4 for($i=1; $xml->currency[$i] ->cname != "Brazil Reais"; $i= $i + 1);
5
6 $cotacao_real = $xml->currency[$i] ->crate;
7
8 echo "Cotação do real em relação ao dollar: $cotacao_real";
[/code]

Veja o código do XML <a href="http://www.xe.com/dfs/sample-usd.xml" target="blank">aqui</a>

Explicação:
Linha 1: pego o XML e coloco o conteúdo dele na variavel arquivo
Linha 2: o simplexml transforma o XML em objeto
Linha 4: faço um for para varrer todo o XML a até que encontre no cname "Brazil Reais"
Linha 6: com a variável i definido na linha 4 eu coloco na variavel o valor da cotação do real

Facinho não é?

Para acabar com a primeira parte deste artigo só tenho que explicar como pegar valores que estão nas tags de auto fechamento como esta <nota valor="5" /> vamos lá então

Aqui vai o XML de exemplo:
[code]

  • <?xml version="1.0" encoding="UTF-8"?>
  • <escola>
    • <salas nome="1A">
      • <aluno>
        • <nome>Zehh</nome>
        • <nota valor="10" />
      • </aluno>
      • <aluno>
        • <nome>Tatiana</nome>
        • <nota valor="9" />
      • </aluno>

    • </salas>
    • <salas nome="1B">
      • <aluno>
        • <nome>João</nome>
        • <nota valor="3" />
      • </aluno>
      • <aluno>
        • <nome>Bruna</nome>
        • <nota valor="5" />
      • </aluno>
      • <aluno>
        • <nome>Bianca</nome>
        • <nota valor="8" />
      • </aluno>
    • </salas>
  • </escola>

[/code]

Como ficaria o PHP:
[code]
1 $arquivo = file_get_contents("http://garagemdaweb.com.br/arquivo.xml");
2 $xml = simplexml_load_string($arquivo);
3
4 $nome_sala1a = $xml->salas[0]["nome"];
5 $nome_aluno2_da_sala1a = $xml->salas[0]->aluno[1]->nome;
6 $nota_aluno2_da_sala1a = $xml->salas[0]->aluno[1]->nota["valor"];
7
8 echo "Sala 1: $nome_sala1a<br>";
9 echo "Nome do aluno 2 sala 1A: $nome_aluno2_da_sala1a<br>";
10 echo "Nota do aluno 2 da sala 1A: $nota_aluno2_da_sala1a<br>";
[/code]

Explicando…
Linha 4: Setei a sala 0, por que para o XML a primeira é identificada como 0 e pagamos o nome o resultado seria 1A
Linha 5: Setei a sala 0 e peguei o valor da tag nome do segundo aluno, como para o XML começa no zero
Linha 6: Setei a sala 0 o aluno 1 e peguei o valor que estava na tag de auto fechamento nota que no caso seria 9

Viu muito fácil trabalhar com o simplexml, logo logo postarei como alterar um arquivo XML.

Dúvidas? deixe seu comentário.

[UPDATE]
SimpleXML - Trabalhando com XML e PHP - Parte 2/2
[/UPDATE]

14 comentários para 'SimpleXML - Trabalhando com XML e PHP - Parte 1/2'

Assine o Feed dos comentários ou faça um TrackBack para 'SimpleXML - Trabalhando com XML e PHP - Parte 1/2'.

  1. Daniel disse,

    Olá, gostaria de saber como funciona a edição de tags e exclusão… é possível fazer???

  2. zezsouza disse,

    Dainel você poderia pegar os dados que você quer e criar um XML novo e salvar em cima do antigo, era essa a sua dúvida?(Já enviado para seu e-mail)

  3. Eduardo Ribeiro disse,

    estou com um problema, tenho o xml abaixo e estou tentando substituir os dados contido no xml por outros.
    exemplo na tag yyyyyyyyyyy trocar por xxxxxxxxxxxxxxx
    será que alguem me ajudaria como fazer para gravar isso no xml?

    yyyyyyyyyyy
    1.0
    xxxxxxx
    teste@teste.com
    apenas um teste

  4. Eduardo Ribeiro disse,

    Dpois tb uso o codigo
    sys->name = ‘Eduardo’;
    echo $xml->sys->name;
    ?>

    O problema é quando uso o codigo abaixo ele substitui o valor obtido do xml pelo que estou atribuindo mas nao esta gravando no xml… pois quando tiro a linha $xml->sys->name = ‘Eduardo’;
    e deixo so echo $xml->sys->name; ele volta com o valor anterior, sendo assim nao esta gravando no XML.

  5. zezsouza disse,

    Eduardo é claro que deste modo ele não vai modificar o xml, o que você pode fazer é salvar os dados pegos no xml em variáveis e depois criar um xml novo sabe? ou salvar em cima do xml antigo.

    Esse é o ponto fraco do SimpleXML ele não permite alteração/exclusão do xml.

  6. João F. Melo disse,

    Olá, muito bom o artigo, estava procurando algo assim, é muito fácil mesmo, mas o que quero realmente é editar e deletar dados do xml pelo php, mas, como vc resaltou acima, “não permite alteração/exclusão”, vou continuar fazendo na mão.
    Valeu.

  7. Taylor disse,

    Olá…
    Qria saber como faço para salvar um documento XML novo, através do php. Eu pego os dados de um documento XML, altero-os, e agora quero salvar o documento XML novo em cima do antigo.

    Abraç

  8. karran disse,

    por favor uma alguma alma caridosa poderia explicar como salvar o arquivo xml encima do antigo?????

  9. Zeh disse,

    Karran da uma lida aqui
    http://www.garagemdaweb.com.br/blog/simplexml-trabalhando-com-xml-e-php-parte-22/

  10. Kazelybr disse,

    Hi webmaster!

  11. Kazeloop disse,

    Hi webmaster!

  12. stephanazs disse,

    Interesting facts.I have bookmarked this site. stephanazs

  13. wagner disse,

    Preciso assinar digitalmente docs xml e consumir web service em php, poderia me ajudar?
    Ficaria muito grato por qualquer ajuda…

:: Trackbacks/Pingbacks ::

  1. Pingback by Zehh » SimpleXML - Trabalhando com XML e PHP - Parte 2/2. - on July 4th, 2007 at 11:43 am

Comente